Technote 1181
Sherlock's Find by Content Text Extractor Plug-ins
|
ñ⁄éü
äTóv
Text Extractor
ÉvÉâÉOÉCÉìÇÃíËã`
ÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ MIME
É^ÉCÉvÇÃìoò^
ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃ
Text Extractor
Ç™íËã`Ç∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`Éì
ÉTÉìÉvÉãÉvÉâÉOÉCÉì
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇà Text
Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ
ÉRÅ[ÉhÉäÉXÉgÇÃçıà¯
éQçlï∂å£
|
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAÉRÉìÉeÉìÉcåüçı
Text Extractor ÉvÉâÉOÉCÉìÇÃçÏê¨Ç…égópÇ∑ÇÈ API
DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBText Extractor
ÉvÉâÉOÉCÉìÇÕÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÅAçıà¯ÇÃçÏê¨Ç‚ÉtÉ@ÉCÉãÇÃóvñÒÇçsǧÇΔÇ´Ç…èëófiÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgèÓïÒÇéÊÇËèoǵNjÇ∑ÅBDZÇÍÇ…ÇÊÇËÅAÉÜÅ[ÉUÇÕÅAèëéÆê›íËÉRÉ}ÉìÉhÇ‚
HTML
É^ÉOǻǫÇÃé¸ï”ÉfÅ[É^Ç‚ÅAèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈèÓïÒÇΔÇÕíºê⁄ä÷åWÇÃǻǢǪÇÃëºÇÃÉfÅ[É^ÇÃçıà¯çÏê¨ÇîÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBèëófiÇÃÉ^ÉCÉvÇ…ëŒâûǵÇΩ
Text Extractor
ÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈDZÇΔÇ≈ÅAÉfÉxÉçÉbÉpÇÕÅAÉÜÅ[ÉUÇ™ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈèÓïÒÇëŒè€Ç…à”ñ°ÇÃdžÇÈåüçıÇé¿çsÇ∑ÇÈDZÇΔÇâ¬î\ǵNjÇ∑ÅB
Text Extractor ÉvÉâÉOÉCÉìÇÕÅAMac OS 8.6
Ç‹ÇΩÇÕǪÇÍà»ç~ÇΔÇΔLJDžégópÇ∑ÇÈDZÇΔÇëOíÒÇ…çÏê¨Ç≈Ç´Ç‹Ç∑ÅBMac
OS 8.6 Ç…ÇÕÅAÅuHTML Text ExtractorÅvÅAÅuPDF Text
ExtractorÅvÇΔǢǧ 2 ǬÇà Text Extractor
ÉvÉâÉOÉCÉìÇ™ïtëÆÇµÇƒÇ¢Ç‹ÇµÇΩÅBÅuHTML Text ExtractorÅvÇÕ HTML
ÉtÉ@ÉCÉãÇ©ÇÁ HTML É^ÉOÇéÊÇËãéÇËÅAHTML
ÉtÉ@ÉCÉãÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgÇÃÇ›Çï‘ǵNjÇ∑ÅBÇ‹ÇΩÅAÅuPDF
Text ExtractorÅvÇÕ Adobe ÇÃ PDF (Portable Document Format)
ÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgèÓïÒÇæÇØÇéÊìæÇµÇ‹Ç∑ÅBMac OS 8.5 Ç≈ HTML
ÉtÉ@ÉCÉãÇÃçıà¯ÇçÏê¨Ç∑ÇÈÇΔÅAèëófiÇ…äiî[Ç≥ÇÍǃǢÇÈÉeÉLÉXÉgÇΔ
HTML É^ÉOÇÃóºï˚Ç™çıà¯ÇÃíÜÇ…ëgÇ›çûÇ‹ÇÍǃǢNjǵÇΩÅBÇ≥ÇÁÇ…ÅAPDF
ÉtÉ@ÉCÉãÇÕçıà¯çÏê¨ÇÃëŒè€Ç©ÇÁèúäOÇ≥ÇÍǃǢNjǵÇΩÅBMac OS 8.6
Ç≈ÇÕÅADZÇÍÇÁÇÃÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩà”ñ°ÇÃdžÇÈÉeÉLÉXÉgèÓïÒÇæÇØÇ™ÅAÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈçıà¯ÉtÉ@ÉCÉãÇÃíÜÇ…ëgÇ›çûÇ‹ÇÍÇÈÇÊǧDžǻÇËNjǵÇΩÅB
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAText Extractor
ÉvÉâÉOÉCÉìÇÃçÏê¨ÇΔÉCÉìÉXÉgÅ[ÉãÇ…ïKóvÇ»èÓïÒÇíÒãüǵNjÇ∑ÅBÇ‹ÇΩÅAè⁄ç◊Ç»ÉRÉÅÉìÉgÇâ¡Ç¶ÇΩÅuÉTÉìÉvÉã
Text Extractor
ÉvÉâÉOÉCÉìÅvLJópà”Ç≥ÇÍǃǢNjÇ∑ÅBÉfÉxÉçÉbÉpÇÕÅADZÇÃÉTÉìÉvÉãÇ…èCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅAìΔé©ÇÃÉtÉ@ÉCÉãÉtÉHÅ[É}ÉbÉgÇ…ëŒâûǵÇΩìΔé©ÇÃÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
|
äTóv
Text Extractor
ÇÕÅAÉtÉ@ÉCÉãÇÃçıà¯çÏê¨ÇΔóvñÒÇÃê∏ìxÇå¸è„Ç≥ÇπÇ‹Ç∑ÅBó·ÇΔǵǃÅAÉäÉXÉg
1 ÇÃÇÊǧǻ HTML ÉtÉ@ÉCÉãǙdžÇÈÇΔǵNjÇ∑ÅB
<!--DZÇà HTML ÉtÉ@ÉCÉãÇ…ÇÕÅAHTML É^ÉOÇΔ ASCII ÉeÉLÉXÉgÇÃóºï˚
Ç™ä‹Ç‹ÇÍǃǢÇÈÅBçıà¯ÇçÏê¨Ç∑ÇÈÇΩÇflÇ…ÇÕÅAÉ^ÉOÇñ≥éãǵÅAèëófiÇ…
ä‹Ç‹ÇÍÇÈÉeÉLÉXÉgÇæÇØÇçıà¯Ç…ëgÇ›çûÇfiDZÇΔÇ™ñ]NjǵǢ-->
<HTML>
<BODY>
This is a sample document.
</BODY>
</HTML>
|
ÉäÉXÉg 1 ÉTÉìÉvÉã HTML ÉtÉ@ÉCÉã
HTML
ÉtÉHÅ[É}ÉbÉgÇîFéØÇ≈ǴǻǢÇΔÅAè„ãLÇÃèëófiÇ…ä‹Ç‹ÇÍÇÈÇ∑Ç◊ǃÇÃíPåÍÇ™çıà¯Ç…ëgÇ›çûÇ‹ÇÍÇ‹Ç∑ÅBDZÇÃÇΩÇflÅAÉRÉìÉeÉìÉcåüçıÇ≈ÅubodyÅvÇåüçıÇ∑ÇÈÇΔè„ãLÇÃèëófiÇ™åüèoÇ≥ÇÍÇ‹Ç∑Ç™ÅAÉÜÅ[ÉUÇ™ÉuÉâÉEÉUÇ≈ÉtÉ@ÉCÉãÇäJǢǃLJÅubodyÅvÇΔǢǧíPåÍÇå©Ç¬ÇØÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅBìØólÇ…ÅAHTML
èëófiÇóvñÒÇ∑ÇÈÇΔÅAóvñÒÇÃíÜÇ…ÇÕ HTML
É^ÉOÇ™ï\é¶Ç≥ÇÍǃǵNjǢNjÇ∑ÅBHTML Text Extractor ÇÕ HTML
ÉtÉ@ÉCÉãÇÃÉtÉHÅ[É}ÉbÉgÇê≥ǵÇ≠îFéØÇ≈Ç´ÇÈÇΩÇflÅAHTML
É^ÉOÇñ≥éãǵǃÅAèëófiÇäJÇ¢ÇΩÇΔÇ´Ç…ÉÜÅ[ÉUÇ©ÇÁå©Ç¶ÇÈÉeÉLÉXÉgÇæÇØÇï‘ǵNjÇ∑ÅBè„ãLÇÃó·Ç≈ÇÕÅAÅuThis
is a sample
document.ÅvÇΔǢǧÉeÉLÉXÉgÇæÇØÇ™çıà¯Ç…ëgÇ›çûÇ‹ÇÍÇ‹Ç∑ÅB
|
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
Text Extractor ÉvÉâÉOÉCÉìÇÃíËã`
Text Extractor
ÉvÉâÉOÉCÉìÇÕÅAà»â∫ÇÃÇÊǧǻì¡ê´ÇéùǬÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇ≈Ç∑ÅB
- ÉtÉ@ÉCÉãÉ^ÉCÉv:
'fbce'
- ÉNÉäÉGÅ[É^É^ÉCÉv:
'fndf'
- ÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgñº: ÅuIATextExtractorÅv
- ÉVÉXÉeÉÄì‡ÇÃà íu:
Åuã@î\ägí£ÅvÉtÉHÉãÉ_ÇÃÅuåüçıÅvÉtÉHÉãÉ_ì‡Ç…džÇÈÅuÉRÉìÉeÉìÉcåüçıÉvÉâÉOÉCÉìÅvÉtÉHÉãÉ_ÅBÉtÉHÉãÉ_É^ÉCÉv
kFindByContentPluginsFolderType
('fbcp' ) ÇÕÅAÉtÉHÉãÉ_ÇåüçıÇ∑ÇÈ
FindFolder ä÷êîÇ…ìnÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
- ÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍÇÈä÷êî -- Text Extractor
ÉvÉâÉOÉCÉìÇ≈ÇÕÅAéüÇÃä÷êîÇÇ∑Ç◊ǃÉCÉìÉvÉäÉÅÉìÉgǵǃÉGÉNÉXÉ|Å[ÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
IAPluginInit
-- Text Extractor
ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇΔÇ´ÅAIAPluginInit
ÉGÉNÉXÉ|Å[Égä÷êîÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
IAPluginTerm
-- Text Extractor
ÉvÉâÉOÉCÉìÇégÇ¡ÇΩÉZÉbÉVÉáÉìÇ™èIóπÇ∑ÇÈÇΔÇ´ÅAIAPluginTerm
ä÷êîÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃéûì_Ç≈ÅAÉvÉâÉOÉCÉìÇÕïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
IAGetExtractorVersion
-- ÉvÉâÉOÉCÉìÇ™ëŒâûǵǃǢÇÈ Text Extractor
ÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇï‘ǵNjÇ∑ÅB
IACountSupportedDocTypes
--
ÉvÉâÉOÉCÉìÇ™èàóùï˚ñ@ÇîFéØÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇï‘ǵNjÇ∑ÅBDZÇÃåƒÇ—èoǵÇÕÅAIAGetIndSupportedDocType
åƒÇ—èoǵDžëŒÇ∑ÇÈóLå¯Ç»ÉCÉìÉfÉbÉNÉXÇÃç≈ëÂêîÇï‘ǵNjÇ∑ÅB
IAGetIndSupportedDocType
-- ÉvÉâÉOÉCÉìÇ™ÉTÉ|Å[ÉgÇ∑ÇÈ n
î‘ñ⁄ÇÃèëófiÉ^ÉCÉvÇï‘ǵNjÇ∑ (êÊì™ÇÃçÄñ⁄ÇÃÉCÉìÉfÉbÉNÉXÇÕ
0 Ç≈ÇÕÇ»Ç≠ 1)ÅBǪÇÍǺÇÍÇÃèëófiÇÕÅAMIME (Multipurpose
Internet Mail Extension)
É^ÉCÉvÇ®ÇÊÇ—ÉTÉuÉ^ÉCÉvÇ…ÇÊǡǃéØï Ç≥ÇÍÇ‹Ç∑ÅBÇΩÇΔǶnjÅAHTML
èëófiÇÕÅutext/htmlÅvÇΔǢǧ MIME É^ÉCÉvÇéùÇøÇ‹Ç∑ÅB
IAOpenDocument
--
èëófiÇÃÉeÉLÉXÉgÇ÷ÇÃéQèΔÇçÏê¨ÇµÇ‹Ç∑ÅBIADocRef
å^ÇÕÅAèëófiÇéQèΔÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃíËã`Ç≥ÇÍÇÈ
opaque ÉfÅ[É^å^Ç≈Ç∑ÅBIADocAccessorPtr
Ç…ÇÕÅAèëófiÇ÷ÇÃéQèΔÇΔÅAǪÇÃèëófiÇ…ÉAÉNÉZÉXÇ∑ÇÈÇΩÇflÇ…égópÇ∑ÇÈä÷êîÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ä‹Ç‹ÇÍÇ‹Ç∑ÅBèëófiÉAÉNÉZÉbÉTÉ|ÉCÉìÉ^ÇÕÅAIACloseDocument
Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈Ç…ï‘Ç≥ÇÍÇÈ IADocRef
ÇégópÇ∑ÇÈÇ∑Ç◊ǃÇÃåƒÇ—èoǵDžëŒÇµÇƒóLå¯Ç≈Ç∑ÅB
IACloseDocument
-- ÉvÉâÉOÉCÉìíËã`Çà IADocRef
ÉIÉuÉWÉFÉNÉgÇ…ïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsǵNjÇ∑ÅB
IAGetNextTextRun
--
ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈèëófiÇÃéQèΔÇ™ë∂ç›Ç∑ÇÈèÍçáÇ…ÅAçÄñ⁄Ç…ä÷òAÇ√ÇØÇÁÇÍÇΩÉeÉLÉXÉgÇÃéüÇÃÉâÉìÇéÊìæÇµÇ‹Ç∑ÅBÉeÉLÉXÉgÇÃéüÇÃÉâÉìÇ≈ÉoÉbÉtÉ@ÇñÑÇflÇ‹Ç∑ÅBì¸óÕéûÅAioSize
ÇÕÉoÉbÉtÉ@ÇÃÉTÉCÉYÇ≈Ç∑Ç™ÅAèoóÕéûÇ…ÇÕ
ioSize
ÇÕÉoÉbÉtÉ@Ç…èëÇ´çûÇ‹ÇÍÇΩÉoÉCÉgêîÇ…Ç»ÇËÇ‹Ç∑ÅBèëófiÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕåæåÍÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAerrIAEndOfTextRun
Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅBǻǮÅAerrIAEndOfTextRun
ÇΔǢǧé¿çsåãâ ÇÕÅADZÇÃÉãÅ[É`ÉìÇ™ãÛÇÃÉoÉbÉtÉ@Çï‘Ç∑ÇΔǢǧDZÇΔÇïKÇ∏ǵLJà”ñ°Ç∑ÇÈLJÇÃÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅB
IAGetTextRunInfo
-- íºëOÇà IAGetNextTextRun
åƒÇ—èoǵDžÇÊǡǃï‘Ç≥ÇÍÇΩÉeÉLÉXÉgÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇéÊìæÇµÇ‹Ç∑ÅB
Text Extractor
ÉvÉâÉOÉCÉìÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇ…ÇÕÅAÉvÉâÉOÉCÉìÇ™èàóùÇ≈Ç´ÇÈÉtÉ@ÉCÉãÇÃéÌófiÇímÇÁÇπÇÈ
1 ǬNjÇΩÇÕï°êîÇà 'mimp'
ÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉäÉ\Å[ÉXÇÃÉtÉHÅ[É}ÉbÉgDžǬǢǃÇÕÅAéüÇÃÅuÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ
MIME É^ÉCÉvÇÃìoò^ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
|
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
ÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ MIME É^ÉCÉvÇÃìoò^
Text Extractor ÇÃÉNÉâÉCÉAÉìÉgÇÕèëófiÇ MIME
É^ÉCÉvÇ…É}ÉbÉvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉNÉâÉCÉAÉìÉgÇ…ÇÊÇÈÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇîªífÇ∑ÇÈç€Ç…ñÇ…óßǬÇÊǧDžÅAÉvÉâÉOÉCÉìÇÃÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇ…ÇÕ
1 ǬNjÇΩÇÕï°êîÇà 'mimp'
ÉäÉ\Å[ÉXÇëgÇ›çûÇfiDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBìΔé©Çà 'mimp'
ÉäÉ\Å[ÉXÇÕÅAÅuIAExtractor.rÅvÉtÉ@ÉCÉãÇéQçlDžǵǃíËã`Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÉäÉXÉg
2 Ç…é¶Ç∑ÇÊǧDžÅA'mimp' ÉäÉ\Å[ÉXÇ…ÇÕÅAÉtÉ@ÉCÉãÇÃ
Finder É^ÉCÉvÇΔ MIME
É^ÉCÉvÇ…É}ÉbÉvÇ∑ÇÈÉtÉ@ÉCÉãägí£éqÇ…ä÷Ç∑ÇÈèÓïÒÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
/* PDF (Portable Document Format) èëófiÇ…ëŒÇ∑ÇÈÉTÉìÉvÉã 'mimp' ÉäÉ\Å[ÉX */
#include "IAExtractor.r"
resource 'mimp' (128) {
kIACurrentMIMEMappingVersion,
'PDF ', /* ÉtÉ@ÉCÉãÉ^ÉCÉv */
'CARO', /* ÉtÉ@ÉCÉãÉNÉäÉGÅ[É^ */
".pdf," /* ÉtÉ@ÉCÉãägí£éq */
"application/pdf," /* MIME É^ÉCÉv */
"Portable Document Format" /* ê‡ñæ */
};
|
ÉäÉXÉg 2 PDF ÉtÉ@ÉCÉãÇ…ëŒÇ∑ÇÈÉTÉìÉvÉã
'mimp' ÉäÉ\Å[ÉX
çıà¯ÇçÏê¨Ç∑ÇÈÇΔÇ´ÅAÉRÉìÉeÉìÉcåüçıÇÕ Internet Config
ÇÃåƒÇ—èoǵÇégǡǃÅAÉtÉ@ÉCÉãÇà MIME
É^ÉCÉvÇåüèoǵNjÇ∑ÅBÉtÉ@ÉCÉãÇà MIME
É^ÉCÉvÇ™åüèoÇ≥ÇÍÇÈÇΔÅAǪÇÃÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑DZÇΔÇ™Ç≈Ç´ÇÈ
Text Extractor ÉvÉâÉOÉCÉìÇ™é©ìÆìIÇ…égópÇ≥ÇÍÇ‹Ç∑ (Text
Extractor ÉvÉâÉOÉCÉìǙǪÇà 'mimp'
ÉäÉ\Å[ÉXÇÃíÜÇ≈ÉfÉRÅ[ÉhÇ™â¬î\Ç≈džÇÈDZÇΔÇí ímǵǃǢÇÈ MIME
É^ÉCÉvÇ…äÓÇ√Ǣǃ)ÅB
|
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃ
ÉRÉìÉeÉìÉcåüçıÇ…ÇÕÅAText Extractor
ÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈÇ¢Ç≠ǬǩÇÃÉãÅ[É`ÉìÇΔÉRÅ[ÉãÉoÉbÉNÇ™ópà”Ç≥ÇÍǃǢNjÇ∑ÅBDZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇÕÉÅÉÇÉääÑÇËìñǃÇΔÉtÉ@ÉCÉãì¸óÕÇ÷ÇÃÉAÉNÉZÉXÇíÒãüǵNjÇ∑ÅBà»â∫ÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅADZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇíÒãüÇ∑ÇÈÇΩÇflÇ…ÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈç\ë¢ëÃÇΔÅAǪÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNǪÇÃLJÇÃDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
ìΔé©ÇÃÉRÅ[ÉhÇÃíÜÇ©ÇÁ Text Extractor
ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÍÇÁÇÃç\ë¢ëÃÇÃçÏê¨ÇΔèâä˙âªÇçsǧDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBDZÇÍÇçsǧï˚ñ@DžǬǢǃÇÕÅAå„èqÇÃÅuÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇÃ
Text Extractor
ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
IAPluginInitBlock ç\ë¢ëÃ
IAPluginInitBlock ÉåÉRÅ[ÉhÇÕÅAText Extractor
ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈä‘ÅAèÌÇ…égópÇ≈Ç´ÇÈÉRÅ[ÉãÉoÉbÉNÉãÅ[É`ÉìÇíÒãüǵNjÇ∑ÅBDZÇÃç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉvÉâÉOÉCÉìÇÃ
IAPluginInit
ÉãÅ[É`ÉìÇ…ÉpÉâÉÅÅ[É^ÇΔǵǃìnÇ≥ÇÍÇ‹Ç∑ÅBÇ‹ÇΩÅAIAPluginTerm
ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈëOÇ≈džÇÍÇŒÅAÉvÉâÉOÉCÉìǙDZÇÃç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^Çï€ë∂ǵÇΩÇËÅADZÇÃç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsǡǃLJà¿ëSÇ≈Ç∑ÅBÉäÉXÉg
3 ÇÕÅAIAPluginInitBlock
ç\ë¢ëÃÇÃì‡óeÇΔÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃégópâ¬î\ÇΔÇ»ÇÈÉRÅ[ÉãÉoÉbÉNÇÃÉvÉçÉgÉ^ÉCÉvÇé¶ÇµÇƒÇ¢Ç‹Ç∑ÅBDZÇÃç\ë¢ëÃÇΔÉRÅ[ÉãÉoÉbÉNÇçsǧÇΩÇflÇÃÉ}ÉNÉç
(ê‡ñæÇñ⁄ìIÇΔǵǃÉäÉXÉg 3
ÇÃíÜÇ…ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇΔǵǃé¶Ç≥ÇÍǃǢÇÈ)
ÇÕÅAÅuIAExtractor.hÅvÉtÉ@ÉCÉãÇÃíÜÇ≈íËã`Ç≥ÇÍǃǢNjÇ∑ÅB
/* IAPluginInitBlock ç\ë¢ëÃÇÃíËã` */
typedef struct IAPluginInitBlock* IAPluginInitBlockPtr;
struct IAPluginInitBlock {
IAAllocUPP Alloc;
IAFreeUPP Free;
IAIdleUPP Idle;
};
typedef struct IAPluginInitBlock IAPluginInitBlock;
/* ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉv */
void* CallIAAllocProc(IAAllocUPP Alloc, UInt32 inSize);
void CallIAFreeProc(IAFreeUPP Free, void* object);
UInt8 CallIAIdleProc(IAIdleUPP Idle);
|
ÉäÉXÉg 3 IAPluginInitBlock
ç\ë¢ëÃÇΔÅADZÇÃç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍǃǢÇÈÉãÅ[É`ÉìÇÃåƒÇ—èoǵDžégópÇ≈Ç´ÇÈÉvÉçÉgÉ^ÉCÉvÇÃêÈåæ
IAPluginInitBlock
ÇÕÅAÉÅÉÇÉäÇäÑÇËìñǃÇÈÉRÅ[ÉãÉoÉbÉNÇΔÅAéûä‘ÇÃǩǩÇÈèàóùÇÃé¿çsíÜÇ…åƒÇ—èoÇ∑DZÇΔÇÃÇ≈Ç´ÇÈÉAÉCÉhÉãÉRÅ[ÉãÉoÉbÉNÇíÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇÕÅAMemory
Manager
Çíºê⁄åƒÇ—èoÇ∑ë„ÇÌÇËÇ…ÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉÅÉÇÉääÑÇËìñǃÉãÅ[É`ÉìÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBéüÇ…ÅADZÇÃç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
CallIAAllocProc
|
void* CallIAAllocProc(
IAAllocUPP Alloc,
UInt32 inSize);
Alloc --
IAPluginInitBlock ç\ë¢ëÃÇÃ
Alloc
ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB
inSize -- äÑÇËìñǃÇÈÉoÉCÉgêîÅB
result --
ÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅAÇ‹ÇΩÉÅÉÇÉäÇ™äÑÇËìñǃÇÁÇÍǻǢèÍçáÇÕ
NULL ÅB
|
CallIAAllocProc ÇÕÅAIAPluginInitBlock
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉÅÉÇÉäÇäÑÇËìñǃÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIAAllocProc
ÇÕÉÅÉÇÉäÇäÑÇËìñǃÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕÅAÇ∑Ç◊ǃÇÃÉÅÉÇÉäÉäÉNÉGÉXÉgÇ…ëŒÇµÇƒÇ±ÇÃÉRÅ[ÉãÉoÉbÉNÇégópÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBê≥èÌÇ…é¿çsÇ≥ÇÍÇÈÇΔÅAÉäÉNÉGÉXÉgÇ≥ÇÍÇΩÉoÉCÉgêîÇä‹ÇfiÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈÇ©ÅAÉäÉNÉGÉXÉgÇñûÇΩÇ∑ÇΩÇflÇ…è\ï™Ç»ÉÅÉÇÉäÇ™ë∂ç›ÇµÇ»Ç¢ÇΔÅANULL
Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB
CallIAFreeProc
|
void CallIAFreeProc(
IAFreeUPP Free,
void* object);
Free --
IAPluginInitBlock ç\ë¢ëÃÇÃ
Free
ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB
object --
CallIAAllocProc
ÉRÅ[ÉãÉoÉbÉNÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅB
|
CallIAFreeProc ÇÕÅAIAPluginInitBlock
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIAAllocProc
ÉãÅ[É`ÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇâï˙Ç∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIAFreeProc
ÇÕÅACallIAAllocProc
ÉRÅ[ÉãÉoÉbÉNÇÃåƒÇ—èoǵDžÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇÃäÑÇËìñǃâèúÇçsǧÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅB
CallIAIdleProc
|
UInt8 CallIAIdleProc(
IAIdleUPP Idle);
Idle --
IAPluginInitBlock ç\ë¢ëÃÇÃ
idle
ÉtÉBÅ[ÉãÉhÇ…äiî[Ç≥ÇÍǃǢÇÈílÅB
result --
åªç›ÇÃèàóùÇ™ÉLÉÉÉìÉZÉãÇ≥ÇÍÇÈèÍçáÇÕÉ[ÉçÇ≈ǻǢílÅAèàóùÇåpë±Ç∑ÇÈèÍçáÇÕÉ[ÉçÅB
|
CallIAIdleProc ÇÕÅAIAPluginInitBlock
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉvÉâÉOÉCÉìÇ™éûä‘ÇÃǩǩÇÈÉ^ÉXÉNÇèàóùǵǃǢÇÈÇΔÇ´Ç…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIAIdleProc
ÇÕÅAéûä‘ÇÃǩǩÇÈÉ^ÉXÉNÇÃé¿çsíÜÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇåƒÇ—èoÇ∑DZÇΔÇ≈ÅAÉvÉâÉOÉCÉìÇÕëºÇÃÉ^ÉXÉNÇ…
CPU
éûä‘ÇÃégópÇãñâ¬ÇµÇ‹Ç∑ÅBDZÇÃÉRÅ[ÉãÉoÉbÉNÇ™É[Éçà»äOÇÃílÇï‘Ç∑èÍçáÅAÉvÉâÉOÉCÉìÇ≈ÇÕë¶ç¿Ç…èàóùÇíÜé~ǵǃÅAé¿çsåãâ ÇΔǵǃ
errIACanceled
Çï‘ǵǃÇ≠ÇæÇ≥Ç¢ÅBàÍï˚ÅAÉAÉCÉhÉãÉRÅ[ÉãÉoÉbÉNÇ™É[ÉçÇï‘Ç∑èÍçáÇÕèàóùÇåpë±ÇµÅAïKóvÇ…âûÇ∂ǃçƒìxÉAÉCÉhÉãÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoǵǃÇ≠ÇæÇ≥Ç¢ÅB
ìΔé©ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ïîÇ©ÇÁ Text Extractor
ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÃç\ë¢ëÃÇèâä˙âªÇµÇƒÅAïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇíËã`Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBIAPluginInitBlock
ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvï˚ñ@Çé¶Ç∑ÉTÉìÉvÉãDžǬǢǃÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃå„îºÇ…džÇÈÅuIAPluginInitBlock
ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IADocAccessorRecord ç\ë¢ëÃ
IADocAccessorRecord
ÇÕÉtÉ@ÉCÉãì‡ÇÃèÓïÒÇ…ÉAÉNÉZÉXÇ∑ÇÈÇΩÇflÇÃÉRÅ[ÉãÉoÉbÉNÇíÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈä‘
(IAPluginInit åƒÇ—èoǵÇΔ
IAPluginTerm
åƒÇ—èoǵÇÃä‘)ÅAIAPluginInitBlock
ÇÃì‡óeÇ™àÍíËÇ≈džÇÈÇΔǵǃLJÅAÉvÉâÉOÉCÉìÇ…ÇÕàŸÇ»ÇÈÉtÉ@ÉCÉãÇéQèΔÇ∑ÇÈ
1 ǬNjÇΩÇÕï°êîÇà IADocAccessorRecord
ç\ë¢ëÃÇ™ìnÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÇΩÇæÇµÅAÉvÉâÉOÉCÉìÇÃ
IACloseDocument
ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈ÅAÉvÉâÉOÉCÉìÇÃ
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
ç\ë¢ëÃÇÕǪÇÃNjNjïœÇÌÇÁǻǢÇΔçlǶÇÈÇÃÇ™ë√ìñÇ≈Ç∑ÅBÉäÉXÉg 4
ÇÕÅAIADocAccessorRecord
ÇÃíËã`ÇΔÅADZÇÃç\ë¢ëÃÇâÓǵÇΩÉRÅ[ÉãÉoÉbÉNÇ…égópÇ≈Ç´ÇÈÉ}ÉNÉç
(ê‡ñæÇñ⁄ìIÇΔǵǃÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇΔǵǃé¶Ç≥ÇÍǃǢÇÈ)
DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
/* IADocAccessorRecord ç\ë¢ëÃÇÃíËã` */
typedef struct IADocAccessorRecord* IADocAccessorPtr;
struct IADocAccessorRecord {
/* docAccessor ÇÕÉtÉ@ÉCÉãÇí«ê’Ç∑ÇÈÇΩÇflÇ…ÉRÉìÉeÉìÉcåüçıÇ…ÇÊǡǃégópÇ≥ÇÍÇÈ opaque å^ÇÃílÅBÉvÉâÉOÉCÉìǙDZÇÃèÓïÒÇ…ÉAÉNÉZÉXÇ∑ÇÈDZÇΔÇÕÇ≈ǴǻǢ */
IADocAccessorRef docAccessor;
IADocAccessorOpenUPP OpenDoc;
IADocAccessorCloseUPP CloseDoc;
IADocAccessorReadUPP ReadDoc;
IASetDocAccessorReadPositionUPP SetReadPosition;
IAGetDocAccessorReadPositionUPP GetReadPosition;
IAGetDocAccessorEOFUPP GetEOF;
};
typedef struct IADocAccessorRecord IADocAccessorRecord;
/* ÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉv */
OSStatus CallIADocumentAccessorOpen(IADocAccessorRef inAccessor);
OSStatus CallIADocumentAccessorClose(IADocAccessorRef inAccessor);
OSStatus CallIADocumentAccessorRead(IADocAccessorRef inAccessor,
void* buffer, UInt32* ioSize);
OSStatus CallIASetDocumentAccessorReadPosition(IADocAccessorRef inAccessor,
SInt32 inMode, SInt32 inOffset);
OSStatus CallIAGetDocumentAccessorReadPosition(IADocAccessorRef inAccessor,
SInt32* outPosition);
OSStatus CallIAGetDocumentAccessorEOF(IADocAccessorRef inAccessor, SInt32* outEOF);
/* è„ãLÇÃÉãÅ[É`ÉìÉvÉçÉgÉ^ÉCÉvÇ…ëŒâûÇ∑ÇÈÉ}ÉNÉç */
#define CallIADocumentAccessorOpen(accessor) \
InvokeIADocAccessorOpenUPP((accessor)->docAccessor, \
(accessor)->OpenDoc)
#define CallIADocumentAccessorClose(accessor) \
InvokeIADocAccessorCloseUPP((accessor)->docAccessor,\
(accessor)->CloseDoc)
#define CallIADocumentAccessorRead(accessor, buffer, size) \
InvokeIADocAccessorReadUPP((accessor)->docAccessor, (buffer),\
(size), (accessor)->ReadDoc)
#define CallIASetDocumentAccessorReadPosition(accessor, mode, offset) \
InvokeIASetDocAccessorReadPositionUPP((accessor)->docAccessor,\
(mode), (offset), (accessor)->SetReadPosition)
#define CallIAGetDocumentAccessorReadPosition(accessor,\
outPosition) \
InvokeIAGetDocAccessorReadPositionUPP((accessor)->docAccessor,\
(outPosition), (accessor)->GetReadPosition)
#define CallIAGetDocumentAccessorEOF(accessor, outEOF) \
InvokeIAGetDocAccessorEOFUPP((accessor)->docAccessor, \
(outEOF), accessor)->GetEOF)
|
ÉäÉXÉg 4 IADocAccessorRecord
ç\ë¢ëÃÇΔÅADZÇÃç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍǃǢÇÈÉãÅ[É`ÉìÇÃåƒÇ—èoǵDžégópÇ≈Ç´ÇÈÉvÉçÉgÉ^ÉCÉvÇÃêÈåæ
ÉäÉXÉg 4 Ç≈íËã`Ç≥ÇÍǃǢÇÈ
IADocAccessorRecord
ÇÕÅAÉtÉ@ÉCÉãÇ÷ÇÃÉAÉNÉZÉXÇ…ïKóvÇ»Ç∑Ç◊ǃÇÃÉäÉ\Å[ÉXÇÉvÉâÉOÉCÉìÇ…íÒãüǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕ
File Manager Çíºê⁄åƒÇ—èoÇ≥ǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅBFile Manager
ÇåƒÇ—èoÇ∑ë„ÇÌÇËÇ…ÅADZÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇâÓǵǃÅAÉtÉ@ÉCÉãÇ÷ÇÃÉAÉNÉZÉXÇ…ïKóvÇ»Ç∑Ç◊ǃÇÃÉtÉ@ÉCÉãì¸óÕëÄçÏÇé¿çsǵǃÇ≠ÇæÇ≥Ç¢ÅBéüÇ…ÅADZÇÃç\ë¢ëÃÇ≈íËã`Ç≥ÇÍǃǢÇÈÉtÉBÅ[ÉãÉhÇΔÉRÅ[ÉãÉoÉbÉNDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
CallIADocumentAccessorOpen
|
OSStatus CallIADocumentAccessorOpen(
IADocAccessorRef inAccessor);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord Ç÷ÇÃÉ|ÉCÉìÉ^ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIADocumentAccessorOpen ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAì¸óÕÇçsǧÉtÉ@ÉCÉãÇÉIÅ[ÉvÉìÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIADocumentAccessorOpen
ÇÕì«Ç›çûÇ›ÇçsǧÇΩÇflÇ…èëófiÇÉIÅ[ÉvÉìǵNjÇ∑ÅBÉvÉâÉOÉCÉìÇ≈ÇÕÅAà»â∫Ç…é¶Ç∑Ç¢Ç∏ÇÍÇ©ÇÃì¸óÕåƒÇ—èoǵÇé¿çsÇ∑ÇÈëOÇ…ÅADZÇÃÉãÅ[É`ÉìÇåƒÇ—èoǵǃÅAì«Ç›çûÇ›ÇÃëŒè€ÇΔÇ»ÇÈèëófiÇÉIÅ[ÉvÉìÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
CallIADocumentAccessorClose
|
OSStatus CallIADocumentAccessorClose(
IADocAccessorRef inAccessor);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor
ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIADocumentAccessorClose ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorOpen
åƒÇ—èoǵDžÇÊǡǃÉIÅ[ÉvÉìÇ≥ÇÍÇΩÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIADocumentAccessorClose
ÇÕÅACallIADocumentAccessorOpen
åƒÇ—èoǵÇ≈ÉIÅ[ÉvÉìǵÇΩÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈÇΩÇflÇ…åƒÇ—èoǵǃÇ≠ÇæÇ≥Ç¢ÅB
CallIADocumentAccessorRead
|
OSStatus CallIADocumentAccessorRead(
IADocAccessorRef inAccessor,
void* buffer,
UInt32* ioSize);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor
ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
buffer --
ÉfÅ[É^Ç™äiî[Ç≥ÇÍÇÈÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^ÅB
ioSize --
ì«Ç›çûÇ‹ÇÍÇÈÉoÉCÉgêîÇä‹ÇÒÇæ 32
ÉrÉbÉgêÆêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™ílÇï‘Ç∑ÇΔÇ´ÅADZÇÃílÇÕé¿ç€Ç…ì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgêîÇ…çXêVÇ≥ÇÍÇ‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIADocumentAccessorRead ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAÉtÉ@ÉCÉãÇ©ÇÁÉfÅ[É^Çì«Ç›çûÇfiÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIADocumentAccessorRead
ÇÕÅAåªç›ÇÃì«Ç›çûÇ›ÉtÉ@ÉCÉãà íuÇ©ÇÁ *ioSize
ÉoÉCÉgÇì«Ç›çûǛNjÇ∑ÅBílÇ™ï‘Ç≥ÇÍÇÈÇΔÇ´ÅA*ioSize
ÇÕé¿ç€Ç…ì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgêîÇîΩâfǵÅAÉãÅ[É`ÉìÇÃñflÇËílÇÕåƒÇ—èoǵǙê≥èÌÇ…é¿çsÇ≥ÇÍÇΩǩǫǧǩÇï\ǵNjÇ∑ÅBDZÇÃÉRÅ[ÉãÉoÉbÉNÇ™
eofErr
ÉGÉâÅ[Çï‘Ç∑èÍçáÇÕÅAÉtÉ@ÉCÉãÇÃññîˆÇ…íBÇ∑ÇÈÇ‹Ç≈Ç…âΩÉoÉCÉgǩǙÉoÉbÉtÉ@Ç…ì«Ç›çûÇ‹ÇÍÇΩâ¬î\ê´Ç™Ç†ÇÈÇΩÇflÅAïKÇ∏
*ioSize
Ç…äiî[Ç≥ÇÍǃǢÇÈílÇÉ`ÉFÉbÉNǵǃÇ≠ÇæÇ≥Ç¢ÅBCallIADocumentAccessorRead
ÇåƒÇ—èoÇ∑ÇΔÅAÉtÉ@ÉCÉãÇÃì«Ç›çûÇ›à íuÇÕì«Ç›çûÇ‹ÇÍÇΩÉoÉCÉgÇÃíºå„Ç‹Ç≈à⁄ìÆÇµÇ‹Ç∑ÅBéüÇ…
CallIADocumentAccessorRead
ÇåƒÇ—èoÇ∑ÇΔÅAíºëOÇÃì«Ç›çûǛǙèIóπǵÇΩà íuÇ©ÇÁéüÇÃì«Ç›çûǛǙäJénÇ≥ÇÍÇ‹Ç∑ÅB
CallIASetDocumentAccessorReadPosition
|
OSStatus CallIASetDocumentAccessorReadPosition(
IADocAccessorRef inAccessor,
SInt32 inMode,
SInt32 inOffset);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor
ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
inMode --
éüÇÃà íuåàÇflíËêîÇÃÇ¢Ç∏ÇÍÇ©Çä‹Ç›Ç‹Ç∑ÅB
kIAFromStartMode --
inOffset
Ç…ÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
kIAFromCurrMode --
inOffset
Ç…ÇÕåªç›ÇÃì«Ç›çûÇ›à íuÇ©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
kIAFromEndMode --
inOffset
Ç…ÇÕÉtÉ@ÉCÉãÇÃññîˆÇ©ÇÁÇÃÉIÉtÉZÉbÉgÇΔâéflÇ≥ÇÍÇÈílÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
inOffset --
ì«Ç›çûÇ›à íuÇÃÉIÉtÉZÉbÉgÇéwíËÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈïÑçÜǻǵ
32 ÉrÉbÉgêÆêîÇä‹Ç›Ç‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIASetDocumentAccessorReadPosition
ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorRead
Ç™åƒÇ—èoÇ≥ÇÍÇΩÇΔÇ´Ç…éüÇÃì«Ç›çûÇ›Ççsǧà íuÇê›íËÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIASetDocumentAccessorReadPosition
ÇÕÅAéüÇà CallIADocumentAccessorRead
Ç™ÉtÉ@ÉCÉãÇÃì«Ç›çûÇ›ÇäJénÇ∑ÇÈà íuÇê›íËÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBÉtÉ@ÉCÉãÇ™ÇÕÇ∂ÇflǃÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇΔÇ´ÅAǪÇÃì«Ç›çûÇ›à íuÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç…ê›íËÇ≥ÇÍǃǢNjÇ∑ÅB
CallIAGetDocumentAccessorReadPosition
|
OSStatus CallIAGetDocumentAccessorReadPosition(
IADocAccessorRef inAccessor,
SInt32* outPostion);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor
ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
outPosition --
ÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁåªç›ÇÃì«Ç›çûÇ›à íuÇ‹Ç≈ÇÃÉIÉtÉZÉbÉgÇ…ëäìñÇ∑ÇÈ
32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIAGetDocumentAccessorReadPosition
ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅACallIADocumentAccessorRead
Ç™åƒÇ—èoÇ≥ÇÍÇΩÇΔÇ´Ç…éüÇÃì«Ç›çûÇ›Ççsǧà íuÇéÊìæÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIAGetDocumentAccessorReadPosition
ÇÕÅAéüÇÃì«Ç›çûÇ›ëÄçÏÇ™çsÇÌÇÍÇÈà íuÇ
*outPosition
Ç…ï‘ǵNjÇ∑ÅBï‘Ç≥ÇÍÇΩílÇÕÉtÉ@ÉCÉãÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇ≈Ç∑ÅB
CallIAGetDocumentAccessorEOF
|
OSStatus CallIAGetDocumentAccessorEOF(
IADocAccessorRef inAccessor,
SInt32* outEOF);
inAccessor --
IAOpenDocument ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇΩ
IADocAccessorRecord
Ç÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅAinAccessor
ÇÕÉIÅ[ÉvÉìÇ≥ÇÍÇΩèÛë‘Ç…Ç»Ç¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
outEOF --
ÉtÉ@ÉCÉãÇ…ä‹Ç‹ÇÍÇÈÉoÉCÉgêîÇ…ëäìñÇ∑ÇÈ 32
ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
CallIAGetDocumentAccessorEOF
ÇÕÅAIADocAccessorRecord
ç\ë¢ëÃÇ…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÉvÉçÉVÅ[ÉWÉÉÇ≈ÅAì¸óÕÉtÉ@ÉCÉãÇÃí∑Ç≥ÇéÊìæÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇ…ÇÊǡǃåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB
CallIAGetDocumentAccessorEOF
ÇÕÉtÉ@ÉCÉãÇÃí∑Ç≥ÇåüèoÇ∑ÇÈÇΩÇflÇ…égópÇ≈Ç´Ç‹Ç∑ÅBílÇ™ï‘Ç≥ÇÍÇÈÇΔÇ´ÅA*outEOF
ÇÃílÇÕÉtÉ@ÉCÉãÇ…ä‹Ç‹ÇÍÇÈëçÉoÉCÉgêîÇ…ê›íËÇ≥ÇÍÇ‹Ç∑ÅB
ìΔé©ÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìì‡ïîÇ©ÇÁ Text Extractor
ÉvÉâÉOÉCÉìÇåƒÇ—èoǪǧÇΔÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÉfÉxÉçÉbÉpÇÕÅAé©ï™é©êgÇ≈DZÇÃç\ë¢ëÃÇèâä˙âªÇµÇƒÅAïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇíËã`Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBIADocAccessorRecord
ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvï˚ñ@Çé¶Ç∑ÉTÉìÉvÉãDžǬǢǃÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃå„îºÇ…džÇÈÅuIADocAccessorRecord
ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉvÅvÇÃÉZÉNÉVÉáÉìÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
Å@
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
|
Text Extractor Ç™íËã`Ç∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`Éì
DZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAÇ∑Ç◊ǃÇà Text Extractor
ÉvÉâÉOÉCÉìÇ…ÇÊǡǃÉGÉNÉXÉ|Å[ÉgÇ≥ÇÍÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉZÉNÉVÉáÉìÇ≈ÇÕÅAǪÇÍǺÇÍÇÃÉãÅ[É`ÉìÇÃè⁄ç◊Ç»ê‡ñæÇΔdžÇÌÇπǃÅAǪÇÍǺÇÍÇÃÉãÅ[É`ÉìÇ…ä÷òAÇ∑ÇÈèdóvéñçÄLJé¶ÇµÇ‹Ç∑ÅB
IAPluginInit
|
OSStatus IAPluginInit(
IAPluginInitBlockPtr initBlock,
IAPluginRef *outPluginRef);
initBlock -- IAPluginInitBlock
ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÅB
outPluginRef --
ÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈÇΔÇ´Ç…ÅAëºÇÃÉvÉâÉOÉCÉìÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇÈ
32 ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉvÉâÉOÉCÉìÇÕDZÇÃílÇǪÇÃ
IAPluginInit
ÉãÅ[É`ÉìÇ…ê›íËǵNjÇ∑ÅBIAPluginTerm
Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈DZÇÃílÇÕïœÇÌÇÈDZÇΔÇ»Ç≠ǪÇÃNjNjï€éùÇ≥ÇÍÇ‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAPluginInit
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇ™é¿çsÇÃèÄîıÇêÆÇ¶ÇΩå„ÅAÉvÉâÉOÉCÉìÇÃ
IAPluginInit
ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ïKóvÇ»èâä˙âªëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅB
initBlock ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ
IAPluginInitBlock
ì‡ÇÃÉRÅ[ÉãÉoÉbÉNÇÕÅAÉvÉâÉOÉCÉìÇ™ÉIÅ[ÉvÉìǵǃǢÇÈä‘
(IAPluginTerm
Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈)
óLå¯Ç≈džÇËë±ÇØÅAÉvÉâÉOÉCÉìÇÃëºÇÃÉãÅ[É`ÉìÇ©ÇÁåƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅB*outPluginRef
Ç…äiî[Ç≥ÇÍÇÈílÇÕÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÅAÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÇÃä‘Ç…ïœâªÇπÇ∏DžǪÇÃNjNjï€éùÇ≥ÇÍÇÈéùë±ìIÇ»ÉXÉeÅ[É^ÉXèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈDZÇΔǙdžÇËÇ‹Ç∑
(DZÇÃílÇÕÉvÉâÉOÉCÉìÇ™ÉNÉçÅ[ÉYǵÇΩå„Ç…ÇÕï€ë∂Ç≥ÇÍÇ‹ÇπÇÒ)ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
6ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAPluginTerm
|
OSStatus IAPluginTerm(IAPluginRef inPluginRef);
inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ
32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit
åƒÇ—èoǵÇ≈ *outPluginRef
ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAPluginTerm
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
ÉvÉâÉOÉCÉìÇà Code Fragment Manager
ÇΔÇÃê⁄ë±Ç™ÉNÉçÅ[ÉYÇ∑ÇÈëOÇ…ÅAÉvÉâÉOÉCÉìÇÃ
IAPluginTerm
ÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ÉÅÉÇÉäÇÃäÑÇËìñǃâèúÅAÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÃÉNÉçÅ[ÉYǻǫÇÃÅAïKóvÇ»ÉNÉäÅ[ÉìÉAÉbÉvëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅBDZÇÃÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÅAéüÇÃ
IAPluginInit
åƒÇ—èoǵDžÇÊǡǃÉvÉâÉOÉCÉìÇ™çƒìxÉIÅ[ÉvÉìÇ≥ÇÍÇÈÇ‹Ç≈ÅAÉvÉâÉOÉCÉìÇÃëºÇÃåƒÇ—èoǵÇÕçsÇÌÇÍÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
7ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAGetExtractorVersion
|
OSStatus IAGetExtractorVersion(
IAPluginRef inPluginRef,
UInt32 outPluginVersion);
inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ
32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit
åƒÇ—èoǵÇ≈ *outPluginRef
ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB
outPluginVersion -- 32
ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBçÏê¨Ç∑ÇÈÉãÅ[É`ÉìÇ≈ÇÕÅADZÇÃílÇ…
kIAExtractorCurrentVersion
Çê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAGetExtractorVersion
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÃíÜÇ≈ÅAÉvÉâÉOÉCÉìÇÕ
*outPluginVersion
ÇÃílDžǪÇÃÉRÉìÉpÉCÉãÇ…égópǵÇΩ Text Extractor
ÉvÉâÉOÉCÉìÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÅuIAExtractor.hÅvÇ≈íËã`Ç≥ÇÍǃǢÇÈ
kIAExtractorCurrentVersion íËêîÇ…ÇÕÅAText
Extractor
ÉvÉâÉOÉCÉìÉCÉìÉ^ÉtÉFÅ[ÉXÇÃåªç›ÇÃÉoÅ[ÉWÉáÉìÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
8ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IACountSupportedDocTypes
|
OSStatus IACountSupportedDocTypes(
IAPluginRef inPluginRef,
UInt32* outCount);
inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ
32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit
åƒÇ—èoǵÇ≈ *outPluginRef
ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB
outCount -- 32
ÉrÉbÉgêÆêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃêÆêîDžǪÇÍÇ™èàóùÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IACountSupportedDocTypes
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇ≈ÇÕÅA*outCount
Ç…ÉvÉâÉOÉCÉìÇ™èàóùÇ≈Ç´ÇÈèëófiÉ^ÉCÉvÇÃêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB*outCount
Ç…äiî[Ç≥ÇÍÇÈílÇÕÅAIAGetIndSupportedDocType
åƒÇ—èoǵÇÃÉCÉìÉfÉbÉNÉXÇΔǵǃéwíËÇ≈Ç´ÇÈÅAóLå¯Ç»ÉCÉìÉfÉbÉNÉXÇÃç≈ëÂílÇΔâéflÇ≥ÇÍÇ‹Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
9ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAGetIndSupportedDocType
|
OSStatus IAGetIndSupportedDocType(
IAPluginRef inPluginRef,
UInt32 inIndex,
char** outMIMEType);
inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ
32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit
åƒÇ—èoǵÇ≈ *outPluginRef
ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB
inIndex --
ï‘Ç≥ÇÍÇÈèëófiÉ^ÉCÉvÇÃÉCÉìÉfÉbÉNÉXÇéwíËÇ∑ÇÈ 32
ÉrÉbÉgêÆêîÅBÉCÉìÉfÉbÉNÉXílÇÃîÕàÕÇÕÅA1 Ç©ÇÁ
IACountSupportedDocTypes
Ç…ÇÊǡǃï‘Ç≥ÇÍÇΩç≈ëÂÇÃÉCÉìÉfÉbÉNÉXílÇ‹Ç≈Ç≈Ç∑ÅB
*outMIMEType -- char*
å^ÇÃÉ|ÉCÉìÉ^ílÅBÉvÉâÉOÉCÉìÇÕDZÇÃílÇê›íËǵǃÅAMIME
É^ÉCÉvï∂éöóÒÇä‹Çfiï∂éöóÒÇÉ|ÉCÉìÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ™êËóLÇ∑ÇÈÉÅÉÇÉäóÃàÊÇÕÉvÉâÉOÉCÉìÇ…ëÆÇµÇ‹Ç∑ÅBǵÇΩǙǡǃÅADZÇÃÉÅÉÇÉäóÃàÊÇ™ÉvÉâÉOÉCÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩèÍçáÅAǪÇÃäÑÇËìñǃâèúLJÉvÉâÉOÉCÉìÇ™çsÇÌÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAGetIndSupportedDocType
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
IAGetIndSupportedDocType ÉãÅ[É`ÉìÇÕ
*outMIMEType Çê›íËǵǃÅAÉvÉâÉOÉCÉìÇ™îFéØÇ≈Ç´ÇÈ
n î‘ñ⁄Çà MIME
É^ÉCÉvÇä‹Çfiï∂éöóÒÇÉ|ÉCÉìÉgǵNjÇ∑ÅBinIndex
ÉpÉâÉÅÅ[É^Ç≈éwíËÇ≈Ç´ÇÈÉCÉìÉfÉbÉNÉXílÇÕÅA1 (0 Ç≈ÇÕÇ»Ç≠) Ç©ÇÁ
IACountSupportedDocTypes
åƒÇ—èoǵDžÇÊǡǃï‘Ç≥ÇÍÇÈç≈ëÂílÇ‹Ç≈ÇÃîÕàÕÇ≈Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
10ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAOpenDocument
|
OSStatus IAOpenDocument(
IAPluginRef inPluginRef,
IADocAccessorPtr inAccessor,
IADocRef* outDoc);
inPluginRef -- ÉvÉâÉOÉCÉìÇ™égópÇ∑ÇÈ
32 ÉrÉbÉgílÅBDZÇÃílÇÕÅAIAPluginInit
åƒÇ—èoǵÇ≈ *outPluginRef
ÉpÉâÉÅÅ[É^Ç…ê›íËÇ≥ÇÍÇΩílÇΔìØÇ∂Ç≈Ç∑ÅB
inAccessor --
ÉtÉ@ÉCÉãÇ©ÇÁèÓïÒÇì«Ç›çûÇfiÇΩÇflÇ…ïKóvÇ»ÉRÅ[ÉãÉoÉbÉNÇä‹ÇÒÇæ
IAPluginInitBlock
Ç÷ÇÃÉ|ÉCÉìÉ^ÅB
outDoc --
ÉvÉâÉOÉCÉìÇ™èëófiÇ…å≈óLÇÃèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≈Ç´ÇÈ
32
ÉrÉbÉgílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBí èÌÅAÉvÉâÉOÉCÉìÇÕèëófiÇ…å≈óLÇÃÉXÉeÅ[É^ÉXïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÇDZÇÃÉpÉâÉÅÅ[É^Ç…äiî[ǵNjÇ∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErrÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAOpenDocument
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
IAOpenDocument
ÇÕÅAÉvÉâÉOÉCÉìÇ™êVǵǢèëófiÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ÇΩÇflÇ…égópÇ≥ÇÍÇÈëOÇ…åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ™ÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇÃì«Ç›çûÇ›ÇäJénÇ∑ÇÈëOÇ…ïKóvÇΔÇ»ÇÈèâä˙âªëÄçÏÇé¿çsÇ≈Ç´ÇÈÇÊǧDžǵNjÇ∑ÅBÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@ÇÕÉÅÉÇÉäÉuÉçÉbÉNÇÃíÜÇ…äiî[Ç≥ÇÍÇÈïKóvǙdžÇËÅAǪÇÃÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ
*outDoc
ÇÃíÜÇ…äiî[Ç≥ÇÍÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃílÇÕÅAèëófiÇ™ÉIÅ[ÉvÉìǵǃǢÇÈÇΔÇ´Ç…
IAGetNextTextRun
Ç‹ÇΩÇÕ IAGetTextRunInfo
ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÅAïKóvÇ»ÉeÉLÉXÉgÇ™èëófiÇ©ÇÁÇ∑Ç◊ǃéÊÇËèoÇ≥ÇÍÇΩå„Ç≈
IACloseDocument
Ç…ìnÇ≥ÇÍÇ‹Ç∑ÅBinAccessor
ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock
ÇΔ *outDoc
Ç…äiî[Ç≥ÇÍǃǢÇÈílÇÕóºï˚ÇΔLJÅAIACloseDocument
Ç™åƒÇ—èoÇ≥ÇÍÇÈÇ‹Ç≈óLå¯Ç≈Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
11ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IACloseDocument
|
OSStatus IACloseDocument(
IADocRef inDoc);
inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument
åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IACloseDocument
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
IACloseDocument
ÇÕïKóvÇ»ÉeÉLÉXÉgèÓïÒÇ™Ç∑Ç◊ǃèëófiÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩå„Ç≈åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBDZÇÃåƒÇ—èoǵÇ≈ÅAÉvÉâÉOÉCÉìÇÕÅAÉtÉ@ÉCÉãÇèàóùÇ∑ÇÈÇΩÇflÇ…çÏê¨Ç≥ÇÍÅAinDoc
ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃéQèΔÇ≥ÇÍÇÈÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉoÉbÉtÉ@Çîjä¸Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
12ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAGetNextTextRun
|
OSStatus IAGetNextTextRun(
IADocRef inDoc,
void* buffer,
UInt32* ioSize);
inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument
åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB
buffer --
ÉÅÉÇÉäÉuÉçÉbÉNÇ÷ÇÃÉ|ÉCÉìÉ^ÅB
ioSize -- 32
ÉrÉbÉgêÆêîílÇ÷ÇÃÉ|ÉCÉìÉ^ÅBÉãÅ[É`ÉìÇ™åƒÇ—èoÇ≥ÇÍÇÈÇΔÇ´ÅADZÇÃílÇÕ
buffer
ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈÉÅÉÇÉäóÃàÊÇ≈égópâ¬î\Ç»ÉoÉCÉgêîÇΔìôǵǢílÇ≈Ç∑ÅBÉeÉLÉXÉgÇDZÇÃÉÅÉÇÉäÉoÉbÉtÉ@Ç…ÉRÉsÅ[ǵÇΩå„ÅAÉvÉâÉOÉCÉìÇÕDZÇÃílÇ…ÉRÉsÅ[Ç≥ÇÍÇΩé¿ç€ÇÃÉoÉCÉgêîÇê›íËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAGetNextTextRun
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
IAGetNextTextRun
ÉãÅ[É`ÉìÇÕÅAÉÅÉÇÉäÉoÉbÉtÉ@ǙǢǡǜǢDžǻÇÈÇ©ÅAéÊÇËèoÇ∑ÉeÉLÉXÉgǙǻÇ≠Ç»ÇÈÇ‹Ç≈ÅAèëófiÇ©ÇÁ
buffer
ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈÉÅÉÇÉäÉoÉbÉtÉ@Ç…ÉeÉLÉXÉgÇÉRÉsÅ[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉeÉLÉXÉgÇÃÉfÉRÅ[ÉhíÜÇ…åæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOǙdžÇÈåæåÍÇ©ÇÁï ÇÃåæåÍÇ…ïœçXÇ≥ÇÍÇÈÇΔÅAÉvÉâÉOÉCÉìÇÕåãâ ÉRÅ[Éh
errIAEndOfTextRun
Çï‘Ç∑DZÇΔÇ≈ÅAÉeÉLÉXÉgÉXÉgÉäÅ[ÉÄì‡Ç…ǪÇÃà íuÇÉ}Å[ÉLÉìÉOǵNjÇ∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅu#IAGetNextTextRunExampleÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAGetTextRunInfo
|
OSStatus IAGetTextRunInfo(
IADocRef inDoc,
char** outEncoding,
char** outLanguage);
inDoc -- ÉvÉâÉOÉCÉìÇà IAOpenDocument
åƒÇ—èoǵDžÇÊǡǃçÏê¨Ç≥ÇÍÇΩèëófiéQèΔílÇ≈ÅAÉtÉ@ÉCÉãÇÃèàóùÇ…ïKóvÇ»ÉXÉeÅ[É^ÉXïœêîÇ‹ÇΩÇÕÉfÅ[É^ÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^Çä‹Ç›Ç‹Ç∑ÅB
outEncoding -- char*
å^ÇÃïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÍÇÕè»ó™â¬î\Ç»ÉpÉâÉÅÅ[É^Ç≈ÅAåƒÇ—èoǵå≥ǙDZÇÃílÇïKóvÇΔǵǻǢèÍçáÇÕ
NULL
Çê›íËǵǃLJǩNjǢNjÇπÇÒÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇΩïœêîÇ…ä‹Ç‹ÇÍÇÈï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^Çäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ…ÇÕÅAÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇÈÉeÉLÉXÉgÇÃåªç›ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅB
outLanguage -- char*
å^ÇÃïœêîÇ÷ÇÃÉ|ÉCÉìÉ^ÅBDZÇÍÇÕè»ó™â¬î\Ç»ÉpÉâÉÅÅ[É^Ç≈ÅAåƒÇ—èoǵå≥ǙDZÇÃílÇïKóvÇΔǵǻǢèÍçáÇÕ
NULL
Çê›íËǵǃLJǩNjǢNjÇπÇÒÅBÉvÉâÉOÉCÉìÇÕÅADZÇÃÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇΩïœêîÇ…ä‹Ç‹ÇÍÇÈï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^Çäiî[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃï∂éöóÒÇ…ÇÕÅAÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇÈÉeÉLÉXÉgÇÃåæåÍñºÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBåæåÍÇÕ
ISO-639
Ç≈íËã`Ç≥ÇÍǃǢÇÈÉCÉìÉ^Å[ÉlÉbÉgïWèÄÇ…èÄãíǵNjÇ∑ÅB
result --
èàóùÇ™ê≥èÌÇ…é¿çsÇ≥ÇÍÇΩèÍçáÇÕ
errIANoErr ÅAèàóùÇ™ê≥èÌÇ…èIóπǵǻǩǡÇΩèÍçáÇÕǪÇÃëºÇÃÉGÉâÅ[ÉRÅ[ÉhÅB
|
IAGetTextRunInfo
ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃíÜÇ≈éwíËÇ∑ÇÈïKóvÇÃdžÇÈÉãÅ[É`ÉìÇ≈Ç∑ÅB
IAGetTextRunInfo ÇÕÅAIAGetNextTextRun
Ç…ÇÊǡǃï‘Ç≥ÇÍÇΩç≈êVÇÃÉoÉbÉtÉ@ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇ…ä÷Ç∑ÇÈèÓïÒÇéÊìæÇµÇ‹Ç∑ÅB
2
ǬÇÃÉpÉâÉÅÅ[É^ÇÕè»ó™â¬î\Ç≈ÅAåƒÇ—èoǵå≥ÇÃÉäÉNÉGÉXÉgÇ…âûÇ∂ǃéwíËǵǃLJéwíËǵǻÇ≠ǃLJǩNjǢNjÇπÇÒÅBÉpÉâÉÅÅ[É^Ç™ïKóvÇΔǵǻǢèÍçáÇÕ
NULL Ç™ê›íËÇ≥ÇÍÇ‹Ç∑ÅB
ÉvÉâÉOÉCÉìÇ™ï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^ÇäÑÇËìñǃÅAǪÇÃÉ|ÉCÉìÉ^Ç
*outEncoding Ç‹ÇΩÇÕ *outLanguage
Ç…äiî[ǵÇΩèÍçáÅAǪÇÃÉÅÉÇÉäóÃàÊÇÃäÑÇËìñǃÇâèúÇ∑ÇÈÇÃÇÕÉvÉâÉOÉCÉìÇÃê”îCÇ≈Ç∑ÅB
Ç¢Ç∏ÇÍÇ©ÇÃílÇîFéØÇ≈ǴǻǢèÍçáÅAÉvÉâÉOÉCÉìÇÕ
*outEncoding Ç‹ÇΩÇÕ *outLanguage
ÇÃílÇΔǵǃ NULL
Çäiî[ǵNjÇ∑ÅBDZÇÃílÇÕÅAÉvÉâÉOÉCÉìÇ™åªç›ÇÃï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕåæåÍÇîFéØÇ≈ǴǻǢDZÇΔÇåƒÇ—èoǵå≥Ç…í ímǵNjÇ∑ÅB
ï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇä‹ÇÒÇæï∂éöóÒÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ
*outEncoding
ÉpÉâÉÅÅ[É^Ç…ï‘Ç≥ÇÍÇ‹Ç∑ÅBï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ëŒâûÇ∑ÇÈÉCÉìÉ^Å[ÉlÉbÉgñºÇΔÇÕÅAÅuiso-8859-1ÅvÅAÅux-mac-romanÅvÅAÅueuc-jpÅvǻǫÇÃDZÇΔÇ≈Ç∑ÅB
DZÇÃÉãÅ[É`ÉìÇÉCÉìÉvÉäÉÅÉìÉgÇ∑ÇÈãÔëÃìIÇ»ï˚ñ@DžǬǢǃÇÕÅAÅuÉäÉXÉg
14ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
|
ÉTÉìÉvÉãÉvÉâÉOÉCÉì
à»â∫ÇÃè⁄ç◊Ç»ÉRÉÅÉìÉgÇä‹ÇfiÉTÉìÉvÉãÇÕÅAÅutext/plainÅvMIME
É^ÉCÉvÇ…ëŒâûǵÇΩ Text Extractor
ÉvÉâÉOÉCÉìÇçÏê¨Ç∑ÇÈï˚ñ@ǬǢǃãÔëÃìIÇ…ê‡ñæÇµÇ‹Ç∑ÅBDZÇÃÉvÉâÉOÉCÉìÇÃã@î\ÇÕÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoǵÇΩÉeÉLÉXÉgÇåƒÇ—èoǵå≥Ç…ìnÇ∑ÇΔǢǧDZÇΔÇ≈Ç∑Ç™ÅAǪÇÃÉCÉìÉvÉäÉÅÉìÉgÇÕîÒèÌÇ…óeà’Ç≈Ç∑ÅBÉfÉxÉçÉbÉpÇÕDZÇÃÉTÉìÉvÉãÇ…ä»íPÇ»èCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅAìΔé©ÇÃÉtÉ@ÉCÉãÉtÉHÅ[É}ÉbÉgÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
/* ÉtÉ@ÉCÉã: PlainTextExtractor.c
Text Extractor ÉvÉâÉOÉCÉìÇÃÉTÉìÉvÉã/ÉVÉFÉã */
/* IAExtractor.h ÉtÉ@ÉCÉãÇ…ÇÕÅAText Extractor ÉvÉâÉOÉCÉìÇÃçÏ
ê¨Ç…ïKóvÇ»íËã`ÇΔç\ë¢ëÃÇ™ä‹Ç‹ÇÍǃǢÇÈ */
#include "IAExtractor.h"
/* éüÇÃíËêîÇÕÅAÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵå≥Ç™ï€éÁÇ∑ÇÈéQèΔílÇ…äiî[Ç≥
ÇÍÇΩÉfÅ[É^ílÇΔǵǃÅADZÇÃÉTÉìÉvÉãÇÃíÜÇ≈égópÇ≥ÇÍÇÈÅBDZÇÃíËêîÇÕ
ÉvÉâÉOÉCÉìÇÃçÏê¨Ç…ïKÇ∏ǵLJïKóvÇΔǵǻǢǙÅAê‡ñæÇóeà’Ç…Ç∑ÇÈÇΩ
ÇflÇ…ñÇ…óßǬ */
enum {
kPlainTextExtractorRefType = 'text'
};
/* éüÇÃÉ}ÉNÉçÇÕÅAéQèΔílÇ™ÉTÉìÉvÉãì‡Ç≈ïœçXÇ≥ÇÍÇÈDZÇΔÇ»Ç≠ǪÇÃÇ‹
Ç‹ï€éùÇ≥ÇÍǃǢÇÈDZÇΔÇåüèÿÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈ */
#define VerifyType(x) ((UInt32)(x)==(UInt32)kPlainTextExtractorRefType)
|
ÉäÉXÉg 5 Text Extractor
ÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÉwÉbÉ_Ç®ÇÊÇ—ÉCÉìÉ|Å[Ég
è„ãLÇÃÉTÉìÉvÉãÉäÉXÉgÇ≈ÇΩÇæ 1
ǬÇÃèdóvÇ»ë§ñ ÇÕÅAÉwÉbÉ_ÉtÉ@ÉCÉãÇ™ÉCÉìÉNÉãÅ[ÉhÇ≥ÇÍÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅBDZDZÇ≈ÇÕÅAïKóvÇ»íËêîÇΔç\ë¢ëÃÇÃíËã`Çä‹ÇfiÅuIAExtractor.hÅvÉtÉ@ÉCÉãÇ™ÉCÉìÉNÉãÅ[ÉhÇ≥ÇÍÇ‹Ç∑ÅB
/* IAPluginInit ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAPluginInit(
IAPluginInitBlockPtr initBlock,
IAPluginRef* outPluginRef) {
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (outPluginRef == NULL) return errIAParamErr;
/* éQèΔílÇèâä˙âªÇ∑ÇÈÅBÉÅÉÇÉääÑÇËìñǃÇïKóvÇΔÇ∑ÇÈÉv
ÉâÉOÉCÉìÇÕÅADZDZÇ≈ initBlock ÇÃèÓïÒÇÉLÉÉÉbÉVÉÖÇ…äiî[
Ç∑ÇÈïKóvǙdžÇÈ */
*outPluginRef = (IAPluginRef)kPlainTextExtractorRefType;
/* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
return errIANoErr;
}
|
ÉäÉXÉg 6 IAPluginInit
ÇÃÉTÉìÉvÉã
IAPluginInit
ÇÕÉvÉâÉOÉCÉìÇ…â¡Ç¶ÇÁÇÍÇÈç≈èâÇÃåƒÇ—èoǵÇ≈Ç∑ÅBDZÇÃåƒÇ—èoǵÇÃä‘Ç…ÅAÉvÉâÉOÉCÉìÇÕïKóvÇ»ïœêîÇ‹ÇΩÇÕÉeÅ[ÉuÉãÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAé¿çsíÜÇÃÉvÉâÉOÉCÉìÇ™
initBlock ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ
IAPluginInitBlock
ÇÃÉRÅ[ÉãÉoÉbÉNÇǪÇÃå„ÅAïKóvÇΔÇ∑ÇÈèÍçáÇÕÅADZÇÃÉ|ÉCÉìÉ^ÇÃÉRÉsÅ[Çï€ë∂Ç∑ÇÈDZÇΔLJïKóvÇ≈Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAPluginTerm ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAPluginTerm(IAPluginRef inPluginRef) {
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!VerifyType(inPluginRef))
return errIAParamErr;
/* DZDZÇ≈ǪÇÃëºÇÃîjä¸ëÄçÏÇé¿çsÇ∑ÇÈ... */
....
/* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
return errIANoErr;
}
|
ÉäÉXÉg 7 IAPluginTerm
ÇÃÉTÉìÉvÉã
í èÌÅAIAPluginTerm
ÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃäÑÇËìñǃÇÁÇÍÇΩÉÅÉÇÉäÇÃäÑÇËìñǃâèúÅAÉäÉ\Å[ÉXÉtÉ@ÉCÉãÇÃÉNÉçÅ[ÉYÅAÇ®ÇÊÇ—é¿çsÇ∑ÇÈïKóvÇÃdžÇÈǪÇÃëºÇÃÉNÉäÅ[ÉìÉAÉbÉvÉ^ÉXÉNÇçsǧÇΩÇflÇ…égópÇ≥ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAGetExtractorVersion ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAGetExtractorVersion(
IAPluginRef inPluginRef,
UInt32* outPluginVersion) {
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!VerifyType(inPluginRef) || !outPluginVersion )
return errIAParamErr;
/* ñflÇËílÇ…ÅADZÇÃÉRÅ[ÉhÇÃÉRÉìÉpÉCÉãÇ…égópǵÇΩ
ÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[ÉWÉáÉìÇê›íËÇ∑ÇÈ */
*outPluginVersion = kIAExtractorCurrentVersion;
/* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
return errIANoErr;
}
|
ÉäÉXÉg 8 IAGetExtractorVersion
ÇÃÉTÉìÉvÉã
kIAExtractorCurrentVersion
ílÇ…ÇÕÅAèÌÇ…ÅuIAExtractor.hÅvÉtÉ@ÉCÉãì‡ÇÃêÈåæÇ…ëŒâûÇ∑ÇÈåªç›ÇÃÉoÅ[ÉWÉáÉìÇ™ä‹Ç‹ÇÍÇ‹Ç∑ÅBåªç›ÇÃÉCÉìÉvÉäÉÅÉìÉeÅ[ÉVÉáÉìÇ≈ÇÕÅADZÇÃílÇÕ
kIAExtractorVersion1 Ç…ê›íËÇ≥ÇÍǃǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IACountSupportedDocTypes ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IACountSupportedDocTypes(
IAPluginRef inPluginRef,
UInt32* outCount) {
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!VerifyType(inPluginRef) || ! outCount)
return errIAParamErr;
/* íËêîÇÕ IAGetIndSupportedDocType Ç…ÉCÉìÉfÉbÉNÉXÇΔǵǃìnÇ≥ÇÍÇÈç≈ëÂíl */
*outCount = 1;
/* ÉmÅ[ÉGÉâÅ[Çï‘Ç∑ */
return errIANoErr;
}
|
ÉäÉXÉg 9 IACountSupportedDocTypes
ÇÃÉTÉìÉvÉã
DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÇΩÇæ 1
ǬÇÃèëófiÉ^ÉCÉvÅAǬNjÇËÉvÉåÅ[ÉìÉeÉLÉXÉgèëófiÇæÇØÇ™ÉTÉ|Å[ÉgÇ≥ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAGetIndSupportedDocType ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAGetIndSupportedDocType(
IAPluginRef inPluginRef,
UInt32 inIndex,
char **outMIMEType) {
/* ÉçÅ[ÉJÉãïœêîÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
static char* supportedDocType = "text/plain";
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!VerifyType(inPluginRef) || !outMIMEType || inIndex != 1)
return errIAParamErr;
/* ñflÇËílÇê›íËÇ∑ÇÈ */
*outMIMEType = supportedDocType;
/* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
return errIANoErr;
}
|
ÉäÉXÉg 10 IAGetIndSupportedDocType
ÇÃÉTÉìÉvÉã
IAGetIndSupportedDocType
ÇÃè„ãLÇÃêÈåæÇ≈ÇÕÅAMIME
É^ÉCÉvï∂éöóÒÇÕÉvÉâÉOÉCÉìÇÃÉOÉçÅ[ÉoÉãÇÃíÜÇ…ÉXÉ^ÉeÉBÉbÉNïœêîÇΔǵǃäiî[Ç≥ÇÍǃǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAOpenDocument ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAOpenDocument(
IAPluginRef inPluginRef,
IADocAccessorPtr inDocAccessor,
IADocRef* outDoc) {
/* ÉçÅ[ÉJÉãïœêî */
OSStatus err;
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!VerifyType(inPluginRef) || !inDocAccessor || !outDoc)
return errIAParamErr;
/* ÉIÅ[ÉvÉjÉìÉOÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ */
err = CallIADocumentAccessorOpen(inDocAccessor);
if (err != errIANoErr)
return err;
/* IADocRef ÇÕÉvÉâÉOÉCÉìÇ…ÇÊǡǃíËã`Ç≥ÇÍǃǢÇÈÅBDZÇÃÉTÉìÉvÉã
Ç≈ÇÕÅAÉAÉNÉZÉbÉTÇ©ÇÁíºê⁄ìIÇ…ì«Ç›çûÇ›ÇçsǡǃǢÇÈÇæÇØÇ»ÇÃÇ≈ÅA
IADocAccessorPtr ÇΔǢǧ IADocRef opaque ÉfÅ[É^å^ÇíËã`ǵǃǢ
ÇÈ */
*outDoc = (IADocRef)inDocAccessor;
/* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
return errIANoErr;
}
|
ÉäÉXÉg 11 IAOpenDocument
ÇÃÉTÉìÉvÉã
è„Ç…é¶ÇµÇΩ IAOpenDocument
åƒÇ—èoǵÇ≈ÅAÉvÉâÉOÉCÉìÇÕÅAèëófiéQèΔÉpÉâÉÅÅ[É^
(*outDoc ) Ç…ä‹Ç‹ÇÍÇÈ inDocAccessor
ÇÃÉRÉsÅ[ÇÉLÉÉÉbÉVÉÖÇ…äiî[Ç∑ÇÈëOÇ…ÅAinDocAccessor
ÉpÉâÉÅÅ[É^Ç…ÇÊǡǃÉ|ÉCÉìÉgÇ≥ÇÍÇÈ IAPluginInitBlock
ÉåÉRÅ[ÉhÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsǡǃǢNjÇ∑ÅBDZÇÃílÇÕÅAéüÇ…ë±Ç≠ÉTÉìÉvÉãÉäÉXÉgÇÃíÜÇ≈èëófiÇéQèΔÇ∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IACloseDocument ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IACloseDocument(IADocRef inDoc) {
/* ÉçÅ[ÉJÉãïœêî */
IADocAccessorPtr docAccessor;
OSStatus err;
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (inDoc == NULL)
return errIAParamErr;
/* IADocRef Ç IAOpenDocument Ç≈íËã`ǵÇΩLJÇà (DZÇÃÉTÉìÉvÉãÇ≈
ÇÕ IADocAccessorPtr) Ç…ÉLÉÉÉXÉgÇ∑ÇÈ */
docAccessor = (IADocAccessorPtr)inDoc;
/* ÉRÅ[ÉãÉoÉbÉNÇégǡǃÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYÇ∑ÇÈ */
err = CallIADocumentAccessorClose(docAccessor);
/* ç≈å„ÇÃÉNÉçÅ[ÉYÇÃÉXÉeÅ[É^ÉXÇï‘Ç∑ */
return err;
}
|
ÉäÉXÉg 12 IACloseDocument
ÇÃÉTÉìÉvÉã
è„Ç…é¶ÇµÇΩ IACloseDocument
åƒÇ—èoǵÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÕ IAPluginInitBlock
ç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsÇ¢ÅAÉtÉ@ÉCÉãÇÉNÉçÅ[ÉYǵǃǢNjÇ∑ÅBIAPluginInitBlock
ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉäÉXÉg
11 Ç…é¶ÇµÇΩ IAOpenDocument
åƒÇ—èoǵÇÃé¿çsíÜÇ…ÉRÉsÅ[Ç™ï€ë∂Ç≥ÇÍÇΩ inDoc
ÉpÉâÉÅÅ[É^Ç©ÇÁã≠êßìIÇ…éùÇøçûÇ‹ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAGetNextTextRun ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAGetNextTextRun(
IADocRef inDoc,
void* buffer,
UInt32* size) {
/* ÉçÅ[ÉJÉãïœêî */
IADocAccessorPtr docAccessor;
OSStatus err;
/* ÉpÉâÉÅÅ[É^ÇåüèÿÇ∑ÇÈ */
if (!inDoc)
return errIAParamErr;
/* IADocRef Ç IAOpenDocument Ç≈íËã`ǵÇΩLJÇà (DZÇÃÉTÉìÉvÉãÇ≈
ÇÕ IADocAccessorPtr) Ç…ÉLÉÉÉXÉgÇ∑ÇÈ */
docAccessor = (IADocAccessorPtr)inDoc;
/* ÉtÉ@ÉCÉãÇ©ÇÁÇÃì«Ç›çûÇ›ÇÉRÅ[ÉãÉoÉbÉNÇ∑ÇÈ */
err = CallIADocumentAccessorRead(docAccessor, buffer, size);
/* ì«Ç›çûÇ›ëÄçÏÇÃåãâ Çï‘Ç∑ */
return err;
}
|
ÉäÉXÉg 13 IAGetNextTextRun
ÇÃÉTÉìÉvÉã
è„Ç…é¶ÇµÇΩ IACloseDocument
åƒÇ—èoǵÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÕ IAPluginInitBlock
ç\ë¢ëÃÇâÓǵǃÉRÅ[ÉãÉoÉbÉNÇçsÇ¢ÅAÉtÉ@ÉCÉãÇ©ÇÁÉfÅ[É^ÉoÉCÉgÇì«Ç›çûÇÒÇ≈ǢNjÇ∑ÅBIAPluginInitBlock
ç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕÅAÉäÉXÉg
11 Ç…é¶ÇµÇΩ IAOpenDocument
åƒÇ—èoǵÇÃé¿çsíÜÇ…ÉRÉsÅ[Ç™ï€ë∂Ç≥ÇÍÇΩ inDoc
ÉpÉâÉÅÅ[É^Ç©ÇÁã≠êßìIÇ…éùÇøçûÇ‹ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
/* IAGetTextRunInfo ÇÃÉCÉìÉvÉäÉÅÉìÉgó· */
OSStatus IAGetTextRunInfo(
IADocRef inDoc,
char** outEncoding,
char** outLanguage) {
/* ÉtÉ@ÉCÉãÇÃÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇ™ÇÌÇ©ÇÁǻǢÇΩÇfl NULL Ç…ê›íËÇ∑ÇÈ */
if (outEncoding != NULL) *outEncoding = NULL;
if (outLanguage != NULL) *outLanguage = NULL;
/* ÉçÅ[ÉJÉãïœêî */
return errIANoErr;
}
|
ÉäÉXÉg 14 IAGetTextRunInfo
ÇÃÉTÉìÉvÉã
DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÉeÉLÉXÉgÉGÉìÉRÅ[ÉfÉBÉìÉOÇΔåæåÍÇÃóºï˚Ç™îFéØÇ≈ǴǻǢDZÇΔÇé¶Ç∑
NULL Ç™ï‘Ç≥ÇÍÇ‹Ç∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
|
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇà Text Extractor
ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ
éüÇ…ÅAÉNÉâÉCÉAÉìÉgÇ™ Text Extractor
ÉvÉâÉOÉCÉìÇégǡǃèëófiÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ï˚ñ@DžǬǢǃÉTÉìÉvÉãÇé¶ÇµÇ‹Ç∑ÅBÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕÅADZÇÍÇÁÇÃÉãÅ[É`ÉìÇ‹ÇΩÇÕDZÇÍÇÁÇÃÉãÅ[É`ÉìÇ…èCê≥Çâ¡Ç¶ÇΩLJÇÃÇégópǵǃ
Text Extractor
ÉvÉâÉOÉCÉìÇåƒÇ—èoǵÅAéñé¿è„džÇÁljÇÈèëófiÉ^ÉCÉvÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑DZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
à»â∫ÇÃäeÉXÉeÉbÉvÇ≈ÇÕÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@ÅAÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@ÅAǪǵǃç≈å„Ç…ÉeÉLÉXÉgÇÃéÊÇËèoǵÇé¿çsÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇåƒÇ—èoÇ∑ï˚ñ@DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBǻǮÅADZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAì¡íËÇÃèëófiÇ…ëŒâûǵÇΩìKêÿÇ»ÉvÉâÉOÉCÉìÇåüçıÇ‹ÇΩÇÕîªífÇ∑ÇÈï˚ñ@DžǬǢǃÇÕê‡ñæÇµÇ‹ÇπÇÒÅB
Text Extractor ÉvÉâÉOÉCÉìÇÃÉZÉbÉgÉAÉbÉv
Ç‹Ç∏ÅAé¿çsÇèÄîıÇ∑ÇÈÇΩÇflÇ…ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvǵÅAåƒÇ—èoǵÇΩÇ¢ÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÇÉvÉâÉOÉCÉìÇ÷ÇÃÉAÉNÉZÉXÇ…égópÇ∑ÇÈç\ë¢ëÃÇ…äiî[Ç∑ÇÈDZÇΔÇ©ÇÁénÇflÇ‹Ç∑ÅBÉäÉXÉg
15Ç…ÇÕÅADZÇÃÉ^ÉXÉNÇÃé¿çsÇ…égópÇ∑ÇÈÉãÅ[É`ÉìÇΔêÈåæÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅB
/* éüÇà typedef ÇÕ Text Extractor ÉvÉâÉOÉCÉìÇ…ÇÊǡǃÉGÉNÉX
É|Å[ÉgÇ≥ÇÍÇÈÉãÅ[É`ÉìÇ…ëŒâûǵǃǢÇÈÅBDZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAÉRÅ[Éh
ì‡Ç©ÇÁÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵÇçsǧÇΩÇflDžDZÇÍÇÁÇÃÉãÅ[É`ÉìÇégóp
Ç∑ÇÈ */
typedef OSStatus (*PluginInitCallPtr)(IAPluginInitBlockPtr initBlock,
IAPluginRef* outPluginRef);
typedef OSStatus (*PluginTermCallPtr)(IAPluginRef inPluginRef);
typedef OSStatus (*GetExtractorVersionCallPtr)(IAPluginRef inPluginRef,
UInt32* outPluginVersion);
typedef OSStatus (*CountSupportedDocTypesCallPtr)(IAPluginRef inPluginRef,
UInt32* outCount);
typedef OSStatus (*GetIndSupportedDocTypeCallPtr)(IAPluginRef inPluginRef,
UInt32 inIndex, char** outMIMEType);
typedef OSStatus (*OpenDocumentCallPtr)(IAPluginRef inPluginRef,
IADocAccessorPtr inDoc, IADocRef* outDoc);
typedef OSStatus (*CloseDocumentCallPtr)(IADocRef inDoc);
typedef OSStatus (*GetTextRunInfoCallPtr)(IADocRef inDoc,
char** outEncoding, char** outLanguage);
typedef OSStatus (*GetNextTextRunCallPtr)(IADocRef inDoc, void* buffer,
UInt32* size);
/* ExtractorRec ÇÕÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgǪÇÃLJÇÃÇ…ä÷
Ç∑ÇÈèÓïÒÇäiî[Ç∑ÇÈÇΩÇflÇ…égópÇ≥ÇÍÇÈÅBDZÇÃíÜÇ…ÇÕÅAÉtÉâÉOÉÅÉìÉg
ÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÅAÇ®ÇÊÇ—ÉtÉâÉOÉÅÉìÉgÇà CFM ê⁄ë± ID î‘çÜ
Ç™ä‹Ç‹ÇÍÇÈ */
typedef struct {
ConnectionID connID;
PluginInitCallPtr PluginInit;
PluginTermCallPtr PluginTerm;
GetExtractorVersionCallPtr GetExtractorVersion;
CountSupportedDocTypesCallPtr CountSupportedDocTypes;
GetIndSupportedDocTypeCallPtr GetIndSupportedDocType;
OpenDocumentCallPtr OpenDocument;
CloseDocumentCallPtr CloseDocument;
GetTextRunInfoCallPtr GetNextTextRun;
GetNextTextRunCallPtr GetTextRunInfo;
} ExtractorRec, *ExtractorRecPtr;
/* OpenExtractor ÇÕÅAspec ÉpÉâÉÅÅ[É^Ç≈éQèΔÇ≥ÇÍÇÈ FSSpec Éå
ÉRÅ[ÉhÇ…ÇÊǡǃéQèΔÇ≥ÇÍÇÈ Text Extractor ÉvÉâÉOÉCÉìÇ…ëÆÇ∑ÇÈ
ÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉçÅ[ÉhÇ∑ÇÈÅBèàóùÇ™ê≥èÌÇ…èIóπÇ∑ÇÈÇΔÅAÉvÉâ
ÉOÉCÉìÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Çä‹Çfiç\ë¢ëÃÇ™ï‘Ç≥ÇÍÇÈÅBÉGÉâÅ[Ç™
î≠ê∂Ç∑ÇÈÇΔÅANULL Ç™ï‘Ç≥ÇÍÇÈ */
ExtractorRecPtr OpenExtractor(FSSpec *spec) {
ExtractorRecPtr extr;
Str63 fragName;
Ptr mainAddr;
Str255 errName;
Boolean fragmentExists; /* fragConnID ÇÃì‡óeÇí«ê’Ç∑ÇÈ */
ConnectionID fragConnID;
CFragSymbolClass symbolClass;
/* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃÉXÉeÅ[É^ÉXÇ…ÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
extr = NULL;
fragmentExists = false;
/* ÉvÉâÉOÉCÉìÇ…ä÷Ç∑ÇÈèÓïÒÇï€ë∂Ç∑ÇÈÇΩÇflÇ…ÉÅÉÇÉäÇäÑÇËìñǃÇÈ */
extr = (ExtractorRecPtr) NewPtrClear(sizeof(ExtractorRec));
if (extr == NULL) goto bail;
/* égópÇ≈Ç´ÇÈÇÊǧDžÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
err = GetDiskFragment(spec, 0, kWholeFork, fragName, kLoadNewCopy,
&fragConnID, &mainAddr, errName);
if (err != noErr) goto bail;
fragmentExists = true;
extr->connID = fragConnID;
/* åƒÇ—èoǵÇΩÇ¢ÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^Çï€ë∂Ç∑ÇÈ */
err = FindSymbol(fragConnID, "\pIAPluginInit",
(Ptr*) &extr->PluginInit, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAPluginTerm",
(Ptr*) &extr->PluginTerm, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAGetExtractorVersion",
(Ptr*) &extr->GetExtractorVersion, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIACountSupportedDocTypes",
(Ptr*) &extr->CountSupportedDocTypes, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAGetIndSupportedDocType",
(Ptr*) &extr->GetIndSupportedDocType, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAOpenDocument",
(Ptr*) &extr->OpenDocument, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIACloseDocument",
(Ptr*) &extr->CloseDocument, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAGetNextTextRun",
(Ptr*) &extr->GetNextTextRun, &symbolClass);
if (err != noErr) goto bail;
err = FindSymbol(fragConnID, "\pIAGetTextRunInfo",
(Ptr*) &extr->GetTextRunInfo, &symbolClass);
if (err != noErr) goto bail;
/* ê≥èÌÇ…èàóùÇèIóπÇ∑ÇÈ */
return extr;
bail:
if (fragmentExists) CloseConnection(&fragConnID);
if (extr != NULL) DisposePtr(Ptr) extr);
return NULL;
}
/* CloseExtractor ÇÕÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉAÉìÉçÅ[
ÉhǵÅAÉvÉâÉOÉCÉìÇÉIÅ[ÉvÉìÇ∑ÇÈÇΔÇ´Ç…äÑÇËìñǃÇΩÉÅÉÇÉäÇâï˙Ç∑
ÇÈ */
void CloseExtractor(ExtractorRecPtr extr) {
/* ÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÇ÷Çà Code Fragment Manager ê⁄ë±ÇÉNÉçÅ[ÉYÇ∑ÇÈ */
CloseConnection(&extr->connID);
/* ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇí«ê’Ç∑ÇÈÇΩÇflÇ…égópǵǃǢÇΩ
ÉÅÉÇÉäÇâï˙Ç∑ÇÈ */
DisposePtr((Ptr) extr);
}
|
ÉäÉXÉg 15 é¿çsÇ…égópÇ∑ÇÈ Text Extractor
ÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈÉãÅ[É`Éì
ÉäÉXÉg 15
Ç…é¶ÇµÇΩÉvÉçÉgÉ^ÉCÉvÇégópÇ∑ÇÈÇΔÅAÉvÉâÉOÉCÉìÇÃÉRÅ[ÉãÉoÉbÉNÇçsǶÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉãÅ[É`ÉìÇ÷ÇÃÉ|ÉCÉìÉ^ÇÕ
ExtractorRec
ç\ë¢ëÃÇ…äiî[Ç≥ÇÍǃǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IAPluginInitBlock ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉv
ÉäÉXÉg 16 Ç…ÅAIAPluginInitBlock
ç\ë¢ëÃÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈÉãÅ[É`ÉìÇé¶ÇµÇ‹Ç∑ÅBDZDZÇ≈ÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇÕÅAç\ë¢ëÃÇ…ä‹Ç‹ÇÍÇÈǪÇÍÇÁÇÃÉRÅ[ÉãÉoÉbÉNÇéQèΔÇ∑ÇÈÉãÅ[É`ÉìÉfÉBÉXÉNÉäÉvÉ^Çï€ë∂Ç∑ÇÈç\ë¢ëÃÇÃíÜÇ≈éQèΔÇ≥ÇÍÇ‹Ç∑ÅB
/* NewIAPluginInitBlock ÇÕÅAÉvÉâÉOÉCÉìÇ™åƒÇ—èoÇ∑DZÇΔÇÃÇ≈Ç´ÇÈ
ÉÅÉÇÉääÑÇËìñǃÉãÅ[É`ÉìÇΔÉAÉCÉhÉãÉãÅ[É`ÉìÇä‹ÇfiêVǵǢ
InitBlock ÉåÉRÅ[ÉhÇäÑÇËìñǃÇÈÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈÇΔÅANULL Ç™ï‘
Ç≥ÇÍÇÈ */
IAPluginInitBlockPtr NewIAPluginInitBlock(void) {
IAPluginInitBlockPtr iBlock;
iBlock = NULL;
iBlock = (IAPluginInitBlockPtr) NewPtrClear(sizeof(IAPluginInitBlock));
if (iBlock == NULL) goto bail;
iBlock->Alloc = NewIAAllocProc(MyIAAlloc);
if (iBlock->Alloc == NULL) goto bail;
iBlock->Free = NewIAFreeProc(MyIAFreeProc);
if (iBlock->Free == NULL) goto bail;
iBlock->Idle = NewIAIdleProc(MyIAIdleProc);
if (iBlock->Idle == NULL) goto bail;
return iBlock;
bail:
if (iBlock != NULL) {
if (iBlock->Alloc != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Alloc);
if (iBlock->Free != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Free);
if (iBlock->Idle != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Idle);
DisposePtr((Ptr) iBlock);
}
return NULL;
}
/* DisposeIAPluginInitBlock ÇÕÅANewIAPluginInitBlock Ç≈äÑÇËìñ
ǃÇÁÇÍÇΩ InitBlock ÉåÉRÅ[ÉhÇ™êËóLÇ∑ÇÈÉÅÉÇÉäÇâï˙Ç∑ÇÈ */
void DisposeIAPluginInitBlock(IAPluginInitBlockPtr iBlock) {
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Alloc);
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Free);
DisposeRoutineDescriptor((UniversalProcPtr) iBlock->Idle);
DisposePtr((Ptr) iBlock);
}
|
ÉäÉXÉg 16 IAPluginInitBlock
ç\ë¢ëÃÇÃäÑÇËìñǃÇΔèâä˙âªÇçsǧÉãÅ[É`Éì
ÉäÉXÉg 16 Ç…é¶ÇµÇΩÉãÅ[É`ÉìÇÕÅAMemory Manager
ÇåƒÇ—èoÇ∑ÉãÅ[É`ÉìÇégópÇ∑ÇÈÇΩÇflÅAIAPluginInitBlock
ç\ë¢ëÃÇÃäÑÇËìñǃÇΔäÑÇËìñǃâèúÇçsǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
IADocAccessorRecord ç\ë¢ëÃÇÃÉZÉbÉgÉAÉbÉv
ÉäÉXÉg 17
ÇÃÉãÅ[É`ÉìÇΔêÈåæÇÕÅAÉvÉâÉOÉCÉìÇÃÉtÉ@ÉCÉãÉAÉNÉZÉXÉRÅ[ÉãÉoÉbÉNÇÉZÉbÉgÉAÉbÉvÇ∑ÇÈï˚ñ@DžǬǢǃãÔëÃìIÇ…ê‡ñæÇµÇ‹Ç∑ÅBDZDZÇ≈ÇÕÅAÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇΔÅAÉtÉ@ÉCÉãǪÇÃLJÇÃÇåpë±ìIÇ…í«ê’Ç∑ÇÈLJǧ
1 ǬÇÃç\ë¢ëÃÇäÑÇËìñǃNjÇ∑ÅB
/* MyDocumentReference Ç…ÇÕÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégópÇ≥ÇÍÇÈì¸óÕ
É\Å[ÉXÇí«ê’Ç∑ÇÈÇΩÇflÇ…åƒÇ—èoǵå≥Ç…ÇÊǡǃégópÇ≥ÇÍÇÈèÓïÒÇ™ä‹Ç‹
ÇÍÇÈÅBDZDZÇ≈ÇÕÅAMac OS ÉtÉ@ÉCÉãÇégópǵǃǢÇÈ */
typedef struct {
FSSpec spec; /* FSSpec ÉåÉRÅ[ÉhÇÃÉRÉsÅ[ */
Boolean docOpen; /* èëófiÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢÇÈÇΔÇ´ÇÕ true */
short refnum; /* ÉtÉ@ÉCÉãéQèΔî‘çÜ */
} MyDocumentReference, *MyDocRefPtr;
/* DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAIADocAccessorRecord ÇÃÉtÉBÅ[ÉãÉhÇ…ÅAMac
OS ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇâÓǵǃåƒÇ—èoÇ≥ÇÍÇÈÉãÅ[É`ÉìÇéQèΔÇ∑ÇÈÉãÅ[
É`ÉìÉfÉBÉXÉNÉäÉvÉ^ÇèëÇ´çûÇfiÅBDZÇÍÇÁÇÃÉãÅ[É`ÉìÇÕà»â∫ÇÃÇÊǧDž
íËã`Ç≥ÇÍǃǢÇÈ */
static OSStatus MyIADocAccessorOpenProc(IADocAccessorRef inAccessor) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
OSErr err;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
err = FSpOpenDF(&refptr->spec, fsRdPerm, &refptr->refnum);
if (err == noErr)
refptr->docOpen = true;
return (OSStatus) err;
}
static OSStatus MyIADocAccessorCloseProc(IADocAccessorRef inAccessor) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
if ( ! refptr->docOpen)
return errIAParamErr;
FSClose(refptr->refnum);
refptr->docOpen = false;
return errIANoErr;
}
static OSStatus MyIADocAccessorReadProc(IADocAccessorRef inAccessor,
void* buffer, UInt32* ioSize) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
OSErr err;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
if ( ! refptr->docOpen)
return errIAParamErr;
err = FSRead(refptr->refnum, ioSize, buffer);
return (OSStatus) err;
}
static OSStatus MyIASetDocAccessorReadPositionProc(
IADocAccessorRef inAccessor, SInt32 inMode, SInt32 inOffset) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
OSErr err;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
if ( ! refptr->docOpen)
return errIAParamErr;
case (inMode) {
case kIAFromStartMode:
err = SetFPos(refptr->refnum, fsFromStart, inOffset);
break;
case kIAFromCurrMode:
err = SetFPos(refptr->refnum, fsFromMark, inOffset);
break;
case kIAFromEndMode:
err = SetFPos(refptr->refnum, fsFromLEOF, inOffset);
break;
default:
err = errIAParamErr;
break;
}
return (OSStatus) err;
}
static OSStatus MyIAGetDocAccessorReadPositionProc(
IADocAccessorRef inAccessor, SInt32* outPosition) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
OSErr err;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
if ( ! refptr->docOpen)
return errIAParamErr;
err = GetFPos(refptr->refnum, outPosition);
return (OSStatus) err;
}
static OSStatus MyIAGetDocAccessorEOFProc(
IADocAccessorRef inAccessor, SInt32* outEOF) {
MyDocRefPtr refptr;
IADocAccessorPtr accPtr;
OSErr err;
accPtr = (IADocAccessorPtr) inAccessor;
refptr = (MyDocRefPtr) accPtr->docAccessor;
if ( ! refptr->docOpen)
return errIAParamErr;
err = GetEOF(refptr->refnum, outEOF);
return (OSStatus) err;
}
/* NewIADocAccessorRec ÇÕÅAMac OS ÉtÉ@ÉCÉãÉVÉXÉeÉÄÇâÓǵǃåƒ
Ç—èoÇ≥ÇÍÇÈÉãÅ[É`ÉìÇéQèΔÇ∑ÇÈÉãÅ[É`ÉìÉfÉBÉXÉNÉäÉvÉ^Çä‹Çfi
IADocAccessorRecord Çèâä˙âªÇ∑ÇÈÅBNewIADocAccessorRec ÇÕÅA
ÉtÉ@ÉCÉãÇ…ä÷Ç∑ÇÈèÓïÒÇä‹ÇfiÉåÉRÅ[ÉhÇ IADocAccessorRecord Éå
ÉRÅ[ÉhÇà docAccessor ÉtÉBÅ[ÉãÉhÇ…äiî[Ç∑ÇÈÅBÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈ
ÇΔÅANULL Ç™ï‘Ç≥ÇÍÇÈ */
IADocAccessorPtr NewIADocAccessorRec(FSSpec *targetFile) {
IADocAccessorPtr docAcc;
MyDocRefPtr refptr;
iBlock = NULL;
refptr = NULL;
refptr = (MyDocRefPtr) NewPtr(sizeof(MyDocumentReference));
if (refptr == NULL) goto bail;
refptr->spec = *targetFile;
refptr->docOpen = false;
refptr->refnum = 0;
docAcc = (IADocAccessorPtr) NewPtrClear(sizeof(IADocAccessorRecord));
if (docAcc == NULL) goto bail;
docAcc->docAccessor = (IADocAccessorRef) refptr;
docAcc->OpenDoc = NewIADocAccessorOpenProc(MyIADocAccessorOpenProc);
if (docAcc->OpenDoc == NULL) goto bail;
docAcc->CloseDoc = NewIADocAccessorCloseProc(MyIADocAccessorCloseProc);
if (docAcc->CloseDoc == NULL) goto bail;
docAcc->ReadDoc = NewIADocAccessorReadProc(MyIADocAccessorReadProc);
if (docAcc->ReadDoc == NULL) goto bail;
docAcc->SetReadPosition = NewIASetDocAccessorReadPositionProc(
MyIASetDocAccessorReadPositionProc);
if (docAcc->SetReadPosition == NULL) goto bail;
docAcc->GetReadPosition = NewIAGetDocAccessorReadPositionProc(
MyIAGetDocAccessorReadPositionProc);
if (docAcc->GetReadPosition == NULL) goto bail;
docAcc->GetEOF = NewIAGetDocAccessorEOFProc(
MyIAGetDocAccessorEOFProc);
if (docAcc->GetEOF == NULL) goto bail;
return docAcc;
bail:
if (refptr != NULL) DisposePtr((Ptr) refptr);
if (docAcc != NULL) {
if (docAcc->OpenDoc != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->OpenDoc);
if (docAcc->CloseDoc != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->CloseDoc);
if (docAcc->ReadDoc != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->ReadDoc);
if (docAcc->SetReadPosition != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->SetReadPosition);
if (docAcc->GetReadPosition != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetReadPosition);
if (docAcc->GetEOF != NULL)
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetEOF);
DisposePtr((Ptr) docAcc);
}
return NULL;
}
/* DisposeIADocAccessorRec ÇÕÅANewIADocAccessorRec Ç…ÇÊǡǃäÑ
ÇËìñǃÇÁÇÍÇΩ IADocAccessorRecord Çâï˙Ç∑ÇÈÅBÇ∑Ç◊ǃÇÃÉTÉu
ÉtÉBÅ[ÉãÉhÇÃäÑÇËìñǃLJâèúÇ≥ÇÍÇÈÅBÉtÉ@ÉCÉãÇ™ÉIÅ[ÉvÉìÇ≥ÇÍǃǢ
ÇÈèÍçáÇÕÅAç\ë¢ëÃÇÃäÑÇËìñǃÇâèúÇ∑ÇÈëOÇ…ÉtÉ@ÉCÉãÇ™ÉNÉçÅ[ÉYÇ≥
ÇÍÇÈ */
void DisposeIADocAccessorRec(IADocAccessorPtr docAcc) {
MyDocRefPtr refptr;
/* èëófiéQèΔÇîjä¸Ç∑ÇÈ */
refptr = (MyDocRefPtr) docAcc->docAccessor;
/* ÉtÉ@ÉCÉãÇ™ÉNÉçÅ[ÉYÇ≥ÇÍǃǢÇÈDZÇΔÇämîFÇ∑ÇÈ -- ǪǧÇ≈Ç»ÇØÇÍÇŒÉNÉçÅ[ÉYÇ∑ÇÈ */
if (refptr->docOpen) FSClose(refptr->refnum);
DisposePtr((Ptr) refptr);
/* ÉAÉNÉZÉbÉTç\ë¢ëÃÇâï˙Ç∑ÇÈ */
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->OpenDoc);
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->CloseDoc);
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->ReadDoc);
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->SetReadPosition);
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetReadPosition);
DisposeRoutineDescriptor((UniversalProcPtr) docAcc->GetEOF);
DisposePtr((Ptr) docAcc);
}
|
ÉäÉXÉg 17 IADocAccessorRecord
ÇÃäÑÇËìñǃÇΔèâä˙âªÇçsǧÉãÅ[É`Éì
ÉäÉXÉg 17 Ç≈ÇÕÅAFile Manager
ÇÃåƒÇ—èoǵÇégǡǃÉtÉ@ÉCÉãÇ…ÉAÉNÉZÉXǵǃǢNjÇ∑ÅBFile Manager
Ç…ÇÊǡǃégópÇ≥ÇÍÇÈèÓïÒÇí«ê’Ç∑ÇÈÇΩÇflÅAǪÇÃèÓïÒÇä‹ÇfiÉvÉâÉCÉxÅ[Égç\ë¢ëÃÇ÷ÇÃÉ|ÉCÉìÉ^Ç
IADocAccessorRecord
Çà docAccessor ÉtÉBÅ[ÉãÉhÇ…äiî[ǵǃǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
Text Extractor ÉvÉâÉOÉCÉìÇÃåƒÇ—èoǵ
ÉäÉXÉg 18 ÇÃÉãÅ[É`ÉìÇÕ Text Extractor
ÉvÉâÉOÉCÉìÇåƒÇ—èoǵǃÅAÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgèÓïÒÇé˚èWǵNjÇ∑ÅBÉtÉ@ÉCÉãÇ©ÇÁé˚èWÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕÅAåƒÇ—èoǵå≥Ç™ÉpÉâÉÅÅ[É^ÇΔǵǃéwíËǵǃǢÇÈÉãÅ[É`ÉìÇâÓǵǃåƒÇ—èoǵå≥Ç…ìnÇ≥ÇÍÇ‹Ç∑ÅB
/* kETBufferSize ÇÕÅAÉeÉLÉXÉgÇÃÉ`ÉÉÉìÉNÇéÊìæÇ∑ÇÈÇΩÇflÇ…äÑÇËìñ
ǃÇÁÇÍǃǢÇÈÉoÉbÉtÉ@ÇÃÉTÉCÉYÇåàíËÇ∑ÇÈ */
#define kETBufferSize (1024*1)
/* TextSinkProc ÇÕåƒÇ—èoǵå≥Ç…ÇÊǡǃíÒãüÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉN
ÉãÅ[É`ÉìÅBÉtÉ@ÉCÉãÇ©ÇÁéÊÇËèoÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕÅAǪÇÃNjNjDZÇÃ
ÉãÅ[É`ÉìÇ…ìnÇ≥ÇÍÇÈ */
typedef OSErr (*TextSinkProc)(void* text, long length, long refcon);
/* ExtractTextFromFile ÇÕÅA*theExtractor Ç…ÇÊǡǃéQèΔÇ≥ÇÍǃǢ
ÇÈ Text Extractor ÉvÉâÉOÉCÉìÇåƒÇ—èoǵǃÅA*targetFile Ç…ÇÊÇ¡
ǃéQèΔÇ≥ÇÍǃǢÇÈÉtÉ@ÉCÉãÇ©ÇÁÉeÉLÉXÉgÇéÊÇËèoÇ∑ÅBÉeÉLÉXÉgÇÃéÊ
ÇËèoǵÇΔï¿çsǵǃÅAéÊÇËèoÇ≥ÇÍÇΩÉeÉLÉXÉgÇÕ textsink ÉpÉâÉÅÅ[É^
Ç≈éwíËÇ≥ÇÍǃǢÇÈ TextSinkProc Ç…ëóêMÇ≥ÇÍÇÈÅBrefcon ÇÕÅA
TextSinkProc Çà refcon ÉpÉâÉÅÅ[É^Ç…ìnÇ≥ÇÍÇÈíl */
OSErr ExtractTextFromFile(FSSpec *targetFile, FSSpec *theExtractor,
TextSinkProc textsink, long refcon) {
ExtractorRecPtr extractor;
IAPluginInitBlockPtr initblock;
IADocAccessorPtr accRec;
IAPluginRef inPluginRef;
UInt32 pluginVersion;
Boolean exInited, docOpen;
IADocRef docRef;
Ptr etBuffer;
/* ÉçÅ[ÉJÉãïœêîÇä˘ímÇÃÉXÉeÅ[É^ÉXÇ…ÉZÉbÉgÉAÉbÉvÇ∑ÇÈ */
extractor = NULL;
initblock = NULL;
accRec = NULL;
exInited = false;
docOpen = false;
etBuffer = NULL;
UInt32 bytecount;
/* ÉvÉâÉOÉCÉìÇèâä˙âªÇ∑ÇÈ */
extractor = OpenExtractor(theExtractor);
if (extractor == NULL) goto bail;
/* äÓñ{ìIÇ»ÉÅÉÇÉäÉ^ÉXÉNÇé¿çsÇ∑ÇÈÇΩÇflÅAÉvÉâÉOÉCÉìÇ…ÇÊǡǃégóp
Ç≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇèâä˙âªÇ∑ÇÈ */
initblock = NewIAPluginInitBlock();
if (initblock == NULL) goto bail;
/* ÉvÉâÉOÉCÉìÇÃèâä˙âªÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ */
err = extractor->PluginInit(initBlock, &pluginRef);
if (err != noErr) goto bail;
exInited = true;
/* ÉvÉâÉOÉCÉìÇ…ñ‚çáÇπÇçsÇ¢ÅAåªç›égópǵǃǢÇÈÉCÉìÉ^ÉtÉFÅ[ÉXÇÃ
ÉoÅ[ÉWÉáÉìÇΔÉvÉâÉOÉCÉìÇÃç\ízÇ…égópǵÇΩÉCÉìÉ^ÉtÉFÅ[ÉXÇÃÉoÅ[
ÉWÉáÉìÇ™ìØä˙ǵǃǢÇÈDZÇΔÇämîFÇ∑ÇÈ */
err = extractor->GetExtractorVersion(pluginRef, &pluginVersion);
if (err != noErr) goto bail;
if (pluginVersion != kIAExtractorVersion1) { err = errIAParamErr; goto bail; }
/* ñ⁄ìIÇÃèëófiÇëŒè€ÇΔǵÇΩÉtÉ@ÉCÉãì¸óÕÇçsǧÇΩÇflÅAÉvÉâÉOÉCÉìÇ…
ÇÊǡǃégópÇ≥ÇÍÇÈÉRÅ[ÉãÉoÉbÉNÇèâä˙âªÇ∑ÇÈ */
accRec = NewIADocAccessorRec(targetFile);
if (accRec == NULL) goto bail;
/* ì«Ç›çûǛDžégópÇ∑ÇÈÉÅÉÇÉäÉoÉbÉtÉ@ÇäÑÇËìñǃÇÈ */
etBuffer = NewPtr(kETBufferSize);
if (etBuffer == NULL) { err = memFullErr; goto bail; }
/* ÉvÉâÉOÉCÉìÇåƒÇ—èoǵÅAì¸óÕÇÃÇΩÇflÇ…èëófiÇÉIÅ[ÉvÉì
Ç∑ÇÈÇÊǧDžóvãÅÇ∑ÇÈ */
err = extractor->OpenDocument(pluginRef, accRec, &docRef);
if (err != noErr) goto bail;
docOpen = true;
/* DZDZÇ≈ÅAÉvÉâÉOÉCÉìǙǪÇÍà»è„ÉoÉCÉgÇï‘Ç≥Ç»Ç≠Ç»ÇÈÇ‹Ç≈ÉãÅ[ÉvÇ…ì¸ÇÈ */
while (true) {
/* ÉoÉbÉtÉ@ëSëÃÇ…ÉeÉLÉXÉgÇèëÇ´çûÇÒÇ≈Ç›ÇÈ */
bytecount = kETBufferSize;
err = extractor->GetNextTextRun(docRef, etBuffer, &bytecount);
/* eofErr ǻǫÇÃǪÇÃëºÇÃÉGÉâÅ[Ç™î≠ê∂ǵÇΩèÍçáÇÕÉãÅ[ÉvÇî≤ÇØÇÈ */
if (err != noErr) goto bail;
/* åæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOÇ™ïœçXÇ≥ÇÍÇÈÇΔÅAerrIAEndOfTextRun Ç™ï‘
Ç≥ÇÍÇÈÅBDZÇÃèÍçáÇÕâΩLJçsÇÌǻǢÅBǵǩǵÅAèÍçáÇ…ÇÊǡǃÇÕÇ¢Ç≠Ǭ
Ç©ÇÃí«â¡èàóùÇçsǧïKóvLJdžÇÈ */
if (err == errIAEndOfTextRun) {
/* ÇΩǢǃǢÅAerrIAEndOfTextRun ÇÕÅAíºëOÇÃåƒÇ—èoǵǙíºëOÇÃÉGÉì
ÉRÅ[ÉfÉBÉìÉOÉâÉìÇ©ÇÁÇ∑Ç◊ǃÇÃï∂éöÇì«Ç›çûÇÒÇ≈Ç¢ÇÈèÍçáÇ…êVǵǢ
ï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇÃîÕàÕÇÃêÊì™Çé¶Ç∑ÇΩÇflÇæÇØÇ…ÅAÉTÉCÉYÇ™É[
ÉçÇÃÉoÉbÉtÉ@ÇΔÇΔLJDžï‘Ç≥ÇÍÇÈÇΩÇflÅADZDZÇ≈ÇÕ bytecount ÇÉ`ÉFÉb
ÉNǵǻǢ */
/* É[ÉçÉoÉCÉgÇ™ï‘Ç≥ÇÍÇΩÇΔÇ´ÇÕí èÌÇÃèIóπèàóùÇçsǧ */
} else if (bytecount == 0)
break;
/* DZÇÃéûì_Ç≈èëófiÇ©ÇÁÉeÉLÉXÉgÇÃÉ`ÉÉÉìÉNÇéÊìæÇµÇΩÅBDZDZÇ≈ÅA
ǪÇÍÇåƒÇ—èoǵå≥ÇÃÉVÉìÉNÇ…ìnÇ∑ */
err = textsink(etBuffer, bytecount, refcon);
if (err != noErr) goto bail;
}
/* DZÇÃéûì_Ç≈èëófiÇ…ä‹Ç‹ÇÍÇÈÇ∑Ç◊ǃÇÃÉeÉLÉXÉgÇ™ì«Ç›çûÇ‹ÇÍÇΩÅBDZ
DZÇ≈ÅAÉvÉâÉOÉCÉìÇ…ÉNÉçÅ[ÉYÇóvãÅǵÅAÉÅÉÇÉäÉoÉbÉtÉ@ÇÃîjä¸ÇΔ
ÉtÉ@ÉCÉãì¸óÕÉRÅ[ÉãÉoÉbÉNç\ë¢ëÃÇÃîjä¸ÇçsǡǃÅAèëófiÇÉNÉçÅ[ÉY
Ç∑ÇÈÅBDisposeIADocAccessorRec ÇÕÉäÉXÉg 17 Ç≈íËã`Ç≥ÇÍǃǢÇÈ */
extractor->CloseDocument(docRef);
docOpen = false;
DisposePtr(etBuffer);
etBuffer = NULL;
DisposeIADocAccessorRec(docAcc);
docAcc = NULL;
/* èëófiÇÉNÉçÅ[ÉYǵÇΩå„ÅAÉvÉâÉOÉCÉìÇÕâï˙Ç≥ÇÍÇÈÅBDZÇÍÇÕÅAÉvÉâ
ÉOÉCÉìÇÃèIóπÉvÉçÉVÅ[ÉWÉÉÇÃåƒÇ—èoǵÅAÉÅÉÇÉääÑÇËìñǃÉRÅ[ÉãÉoÉb
ÉNÇÃâï˙ (DisposeIAPluginInitBlock ÇÕÉäÉXÉg 16 Ç≈íËã`Ç≥ÇÍǃǢ
ÇÈ)ÅAǪǵǃÉvÉâÉOÉCÉìÇÃÉRÅ[ÉhÉtÉâÉOÉÅÉìÉgÇÃâï˙
(CloseExtractor ÇÕÉäÉXÉg 15 Ç≈íËã`Ç≥ÇÍǃǢÇÈ) Ç…ÇÊǡǃé¿çsÇ≥
ÇÍÇÈ */
extractor->PluginTerm(pluginRef);
exInited = false;
DisposeIAPluginInitBlock(initblock);
initblock = NULL;
CloseExtractor(extractor);
extractor = NULL;
/* èàóùÇê≥èÌÇ…èIóπÇ∑ÇÈ */
return noErr;
bail:
/* ÉGÉâÅ[èàóùÉRÅ[ÉhÅBâÒïúÉXÉeÅ[ÉgÉÅÉìÉgÇÃèáèòÇ™èdóvÇ≈džÇÈDZÇΔÇ…íçà” */
if (docOpen) extractor->CloseDocument(docRef);
if (etBuffer != NULL) DisposePtr(etBuffer);
if (docAcc != NULL) DisposeIADocAccessorRec(docAcc);
if (exInited) extractor->PluginTerm(pluginRef);
if (initblock != NULL) DisposeIAPluginInitBlock(initblock);
if (extractor != NULL) CloseExtractor(extractor);
return err;
}
|
ÉäÉXÉg 18 Text Extractor
ÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ÉãÅ[É`ÉìÇÃÉTÉìÉvÉã
ÉäÉXÉg 18
Ç…é¶ÇµÇΩÉãÅ[É`ÉìÇÕÅAÉvÉâÉOÉCÉìÇÃÉãÅ[É`ÉìÇíºê⁄åƒÇ—èoÇ∑DZÇΔÇ≈é¿ç€ÇÃÉeÉLÉXÉgÇÃéÊÇËèoǵÇé¿çsǵNjÇ∑ÅBDZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAåæåÍÉGÉìÉRÅ[ÉfÉBÉìÉOÇ‹ÇΩÇÕï∂éöÉGÉìÉRÅ[ÉfÉBÉìÉOÇ…ä÷êSÇ™ï•ÇÌÇÍǃǢNjÇπÇÒÅBÇΩÇæÇµÅADZÇÃÉTÉìÉvÉãÇ…é·ä±ÇÃèCê≥Çâ¡Ç¶ÇÈÇæÇØÇ≈ÅADZÇÃèÓïÒÇä»íPÇ…éÊìæÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBDZÇÃÉãÅ[É`ÉìÇ≈ÇÕÅAÉäÉXÉg
15ÅAÉäÉXÉg 16ÅAÇ®ÇÊÇ—ÉäÉXÉg
17
Ç≈íËã`Ç≥ÇÍǃǢÇÈç\ë¢ëÃÇΔÉãÅ[É`ÉìÇégópǵǃǢNjÇ∑ÅB
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
|
ÉRÅ[ÉhÉäÉXÉgÇÃçıà¯
éüÇ…ÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ…ä‹Ç‹ÇÍǃǢÇÈÉRÅ[ÉhÉäÉXÉgÇÃàÍóóÇé¶ÇµÇ‹Ç∑ÅBÉäÉXÉg
5 Ç©ÇÁ 14
ÇÕÉTÉìÉvÉãÉvÉâÉOÉCÉìÇÃì‡óeÇíËã`ǵǃǢNjÇ∑ÅBÇ‹ÇΩÅAÉäÉXÉg 15
Ç©ÇÁ 18
ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÉvÉâÉOÉCÉìÇåƒÇ—èoÇ∑ÇΩÇflÇÃãÔëÃìIÇ»ï˚ñ@Çé¶ÇµÇƒÇ¢Ç‹Ç∑ÅB
|
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
Further References
ÉyÅ[ÉWÇÃêÊì™Ç…ñflÇÈ
çXêVì˙: 1999 îN 10 åé 5 ì˙
|